【问题标题】:C# DLL remove Interop and AxInterop filesC# DLL 删除 Interop 和 AxInterop 文件
【发布时间】:2011-05-16 03:29:27
【问题描述】:


我正在用 C# 开发一个 DLL,它在 GUI 和代码端使用外部 C++ DLL COM 组件。我总共使用了 3 个其他组件,对于我引用的每个组件,我都会在输出中得到一个“Interop.ComponentName.dll”文件。

我确实尝试将“属性”窗口中的“复制本地”设置更改为 false,但在运行时出现错误,即主 DLL 找不到文件。

我知道程序运行需要这些文件,但是否可以在子目录中使用这些文件,例如主 dll 在“../extras/Test.dll”中,我想要互操作文件在“../extras/TestResources/”中?

额外信息:我在 Windows XP SP3 中使用 C# 和 Visual Studio 2008。

谢谢,K。

【问题讨论】:

    标签: c# dll com interop


    【解决方案1】:

    您引用了哪些互操作 DLL?如果它们是非标准的(即未包含在您的目标 .NET 框架分发中),则 Visual Studio 可能会将它们包含在您的项目输出中,因为它们未在您的全局程序集缓存中注册。

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

    但是,有一种方法可以实现您的要求。不过,这比允许 Visual Studio 处理您的部署要复杂得多。查看 MSBuild.exe 并构建脚本。

    【讨论】:

    • 它们是非标准的,我制作的一对和一对(用于 GUI)是由其他人构建的,我无法进行重建。基本上我使用的 DLL 文件位于同一目录或父目录中。我会继续调查谢谢。
    【解决方案2】:

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

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

    链接文章中需要注意的两行:

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

    • 对于没有强名称的程序集,版本将被忽略,加载程序使用 中第一次出现的

    【讨论】:

      猜你喜欢
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      相关资源
      最近更新 更多