DSL工具:如何将DLL创建为弱名称

时间:2008-12-04 17:06:00

标签: visual-studio assemblies dsl dsl-tools

我有一个DSL Tools解决方案。

我需要为这个项目添加一个弱命名的引用。 因为DSL Tools项目DLL名称很强,所以我不能使用弱命名的DLL。

我无法强制命名DLL,因为我无法重新编译它。

我尝试通过转到Dsl和DslPackage项目属性并取消选中Sigining选项卡中的“签署程序集”选项来使我的DSL Tools项目DLL命名为弱。

然后我编译它。 错误列表提供以下错误

"gacutil.exe" exited with code 1

查看VS2005输出窗口,我看到正在调用gacutil

C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin\gacutil.exe -nologo -i "C:\Academy\ResearchAndDevelopment\FrontendGenerator\DslPackage\bin\Debug\vantyx.FEGenerator.DslPackage.dll"

之后我使用了命令提示符,并显示gacutil.exe错误:

Z:\>"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin\gacutil.exe" -nologo -i "C:\Academy\ResearchAndDevelopment\FrontendGenerator\DslPackage\bin\Debug\vantyx.FEGenerator.DslPackage.dll"
Failure adding assembly to the cache: Attempt to install an assembly without a strong name

我不知道为什么以及如何调用gacutil.exe。 我查看了项目和解决方案属性,并且没有配置为调用gacutil.exe的选项。 我甚至在每个文件中查找“gacutil.exe”,但我一无所获。

我真正想要的是能够使用我无法命名的弱命名的DLL。 因此,我一直试图让我的DSL Tools DLL名字不好,但我不能。

有关我如何解决此问题的任何帮助?

非常感谢, 路易斯菲利普

2 个答案:

答案 0 :(得分:1)

除了上面写的答案, Visual Studio的所有加载项都必须具有强名称。

可以通过在运行时加载程序集并使用反射来调用方法来解决某些问题。

此致 路易斯

答案 1 :(得分:1)

使用运行时绑定和反射是一个很好的解决方案并且有效。我实现的另一个解决方案是启动一个单独的AppDomain并让AppDomain加载程序集并运行你想要的任何方法。这种方法的缺点是额外的复杂性和性能。一个人真的必须知道他在做什么,因为他正在实践中在Visual Studio的进程空间中启动一个单独的.net应用程序。好处是,经过一些小心,你可以一直保持类型安全。