2010-02-18 72 views
4

我们的一位合作伙伴向我们提供了一个需要从我们的应用程序访问的程序集。不幸的是,这不是强名,所以我们无法将其安装到GAC。我们不能将它放在与我们的可执行文件相同的地方。如何将非强名称程序集注册为与GAC中一样加载?

有没有解决方案呢?

编辑:这将是一个只用于测试的临时解决方案,当他们去RC时,我们将有一个强大的命名组件。

+0

出于好奇,为什么你不能把它放在与你的可执行文件相同的地方? – 2010-02-18 16:03:17

+0

无法访问我假设的源代码? – mxmissile 2010-02-18 16:04:50

+0

我很好奇,为什么它不能放在同一个目录中。是否存在某种版本问题,它与您必须使用的另一个库的名称相同? – 2010-02-18 16:30:08

回答

5

您在这一点上有几个选项。

首先是将程序集放置在具有name of the assembly (without the extension) which is a subdirectory of the application directory的目录中。

第二个是指定您希望CLR使用probing element在app.config文件中探测引用的子目录。

最后,您可以动态地使用各种Load methods on the Assembly class加载程序集,但我要说的是,在这种情况下,非常糟糕的主意,因为你有装配,你必须要在它使用的具体类型。像这样的晚期装配加载通常用于当你想取代某些抽象的实现时,这似乎并不是这种情况。

0

另一种解决方案是将以下内容添加到machine.config文件:

<runtime> 
    <developmentMode developerInstallation="true"/> 
</runtime> 

并添加DEVPATH =路径系统环境变量。

3

使用反编译&签名(Visual Studio的开发者使用命令提示符)解决方法:

ildasm.exe /all /typelist /out=DataSystem.il DataSystem.dll 
ilasm.exe /dll /optimize /key=DataSystem.snk DataSystem.il 

DataSystem.snk可以作为一个文件使用Visual Studio IDE http://www.bloggedbychris.com/2011/09/29/signing-a-net-assembly-in-visual-studio/

生成,那么你应该能够以运行

gacutil.exe -i DataSystem.dll 
相关问题