将策略文件添加到 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 时出错的主要内容,如果未能解决你的问题,请参考以下文章