我正在开发一个C#中的DLL,它在GUI中使用外部C ++ DLL COM组件,也用于代码端。总的来说,我使用了3个其他组件,并且对于每个组件,我都会在输出中包含“Interop.ComponentName.dll”文件。
我确实尝试将“属性”窗口中的“复制本地”设置更改为false但我在运行时遇到主DLL无法找到文件的错误。
我知道这些是程序运行所必需的,但是可以在子目录中使用这些文件,例如主dll在“”../extras/Test.dll“中,我想要Interop文件在“../extras/TestResources/”?
额外信息:我在Windows XP SP3中使用C#和Visual Studio 2008。
谢谢,K。
答案 0 :(得分:0)
您引用了哪些互操作DLL?如果它们是非标准的(即未包含在目标.NET框架发行版中),则Visual Studio可能会将它们包含在项目输出中,因为它们未在全局程序集缓存中注册。
考虑分布式C#应用程序如何引用外部DLL。如果它们是.NET发行版的一部分,那么它们就会在用户的GAC中正确注册。否则,您的设置/部署项目将注册它们。如果是后者,那么如果你转到原始项目的属性,在Build下,你应该看到输出路径字段。 Visual Studio的内部构建实用程序只允许您将项目的构建文件输出到单个目录。
但是,有一种方法可以实现您的要求。它比允许Visual Studio处理您的部署要复杂得多。查看MSBuild.exe并构建脚本。
答案 1 :(得分:0)
要使CLR能够找到不在bin文件夹中的程序集或其自动搜索的其他位置,您可以使用< codeBase> app.config文件中的元素。
有关如何执行此操作的详细信息,请参阅http://msdn.microsoft.com/en-us/library/efs781xb(vs.71).aspx。
来自链接文章的2行:
如果程序集是私有程序集,则代码库设置必须是相对于应用程序目录的路径。
对于没有强名称的程序集,将忽略版本,并且加载程序使用< codebase>的第一个外观。在< dependentAssembly>