将策略文件添加到 GAC 时出错

Posted

技术标签:

【中文标题】将策略文件添加到 GAC 时出错【英文标题】:Error adding policy file to GAC 【发布时间】:2008-11-19 15:24:51 【问题描述】:

我正在尝试按照thread 将发布者策略文件添加到 gac,但是当我尝试在测试服务器上添加文件时遇到问题。

我得到“找不到在程序集'policy.3.0.assemblyname.dll'的清单中指定的模块”

我的策略文件如下所示:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="*assemblyname*"
                          publicKeyToken="7a19eec6f55e2f84"
                          culture="neutral" />
        <bindingRedirect oldVersion="3.0.0.0"
                         newVersion="3.0.0.1"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

请帮忙!

谢谢


我已经用一个本身没有依赖项(除了默认值)的新程序集从头开始重新创建问题 - 在我的本地开发机器上一切正常(并且重定向也很好),但添加策略文件时出现相同的错误到服务器上的 GAC!

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="TestAsm"
                          publicKeyToken="5f55456fdcc9b528"
                          culture="neutral" />
        <bindingRedirect oldVersion="3.0.0.0"
                         newVersion="3.0.0.1"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

通过以下方式链接

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\al.exe /link:PublisherPolicy.xml /out:policy.3.0.TestAsm.dll /keyfile:..\..\key.snk /version:3.0.0.0
pause

请帮忙!

【问题讨论】:

【参考方案1】:

哇——好的。

我应该更加注意这到底意味着什么

(MSDN) How to: Create a Publisher Policy

重要提示:发布者政策 程序集无法添加到全局 程序集缓存,除非原始 发布者策略文件位于 与程序集相同的目录。

坦率地说,这个要求太奇怪了,以至于它没有注册。添加策略程序集时,编译到我尝试添加到 gac 的程序集的原始策略文件必须与策略程序集位于同一文件夹中。

【讨论】:

【参考方案2】:

好吧……只是想检查一些基础知识……

您肯定已经将两个版本的依赖程序集都安装到 GAC 中了吗?

您是否已验证 [assembly: AssemblyVersion()] 属性中的版本号是否正确。

您确实使用了 [assembly: AssemblyVersion()] 和 NOT [assembly: AssemblyFileVersion("1.0.0.1")]。

更新:我的错,您只需要 GAC 中最新版本的程序集。我只是在这里尝试过,它有效。我唯一的其他想法是检查公钥标记是否相同,并且您没有拼错程序集名称。

此外,当您生成策略文件时,请确保使用程序集链接器中的 /version 开关将版本号显式设置为 3.0.0.0 并且不要指定 /platform 开关。例如

al.exe /link:assembly.config /out:policy.3.0.assembly.dll 
         /keyfile:mykey.snk /version:3.0.0.0

【讨论】:

感谢回复不,我只在 GAC (3.0.0.1) 中获得了程序集的目标版本 - 但这适用于我的开发机器(它安装到 GAC,不确定是否它重定向还可以)。如果我想进行此重定向,是否必须在 GAC 中拥有未使用的版本?程序集版本和程序集文件版本都设置为 3.0.0.1 实际上,您似乎只需要 GAC 中的最新版本的程序集,因此为那个红鲱鱼道歉。 我在答案中添加了更多的 cmets。【参考方案3】:

要使用 Wise 将策略程序集添加到 GAC,您执行与添加策略所针对的程序集相同的操作。因此,您将策略程序集添加到 Wise 中的“全局程序集缓存”中,只要您在机器上的同一位置有策略文件 (.config),Wise 也会自动将其添加到 GAC。

【讨论】:

以上是关于将策略文件添加到 GAC 时出错的主要内容,如果未能解决你的问题,请参考以下文章

将 AIDL 更新到下一个版本时出错

LNK1104 将 Boost 库添加到 Qt 项目时出错

将 SOIL.lib 与 GCC 一起使用 - 添加符号时出错:无法识别文件格式

将多个项目添加到具有固定大小数组的优先级队列时出错

添加应用内计费库时出错

将新工作表添加到XLSM宏Excel文件时出错