繁体   English   中英

C#DLL删除Interop和AxInterop文件

[英]C# DLL remove Interop and AxInterop files


我正在用C#开发一个DLL,该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。

您引用哪些互操作DLL? 如果它们是非标准的(即未包含在您的目标.NET框架发行版中),则Visual Studio可能会将它们包括在您的项目输出中,因为它们没有在您的Global Assembly Cache中注册。

请考虑您的分布式C#应用程序如何引用外部DLL。 如果它们是.NET发行版的一部分,则它们已在用户的GAC中正确注册。 否则,您的设置/部署项目将对其进行注册。 如果是后者,那么如果您转到原始项目的属性,则在Build下,您应该看到输出路径字段。 Visual Studio的内部生成实用程序仅允许您将项目的生成文件输出到单个目录。

但是,有一种方法可以实现您的要求。 但是,与允许Visual Studio处理您的部署相比,它要复杂得多。 看一下MSBuild.exe并生成脚本。

要使CLR能够找到不在bin文件夹或其自动搜索的其他位置中的程序集,可以在app.config文件中使用<codeBase>元素。

有关如何执行此操作的详细信息,请参见http://msdn.microsoft.com/zh-cn/library/efs781xb(vs.71).aspx

链接文章中有2行供您注意:

  • 如果程序集是私有程序集,则代码库设置必须是相对于应用程序目录的路径。

  • 对于没有强名的程序集,版本会被忽略,并且加载程序会在<dependentAssembly>中使用<codebase>的首次出现

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM