0

我有一个 DSL 工具解决方案。

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

我无法使 DLL 具有强名称,因为我无法重新编译它。

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

然后我编译它。错误列表给出以下错误

"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 工具 DLL 命名为弱名称,但我做不到。

关于我如何解决这个问题的任何帮助?

非常感谢, Luís Filipe

4

2 回答 2

1

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

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

问候,路易斯

于 2008-12-12T16:04:59.870 回答
1

使用带有反射的运行时绑定是一个很好的解决方案并且有效。除此之外,我实施的另一个解决方案是启动一个单独的 AppDomain 并让该 AppDomain 加载程序集并运行您想要的任何方法。这种方法的缺点是额外的复杂性和性能。一个人真的必须知道他在做什么,因为他实际上是在 Visual Studio 的进程空间中启动一个单独的 .net 应用程序。好处是,只要小心一点,您就可以一直获得类型安全。

于 2009-03-19T21:17:46.437 回答