.net - 除非在代码中引用,否则通过添加引用添加的程序集不会复制到输出目录

标签 .net visual-studio-2010 msbuild dependency-injection ninject

情况:

  • 项目 1 是解决方案中的一个程序集
  • 项目 2 是同一解决方案中的可执行程序集项目
  • 项目 2 有一个项目引用(通过添加引用)到项目 1
  • 项目 2 在代码
  • 中没有直接引用项目 1 中的命名空间/类型。
  • 项目 2 使用 Ninject 动态加载项目 1 并使用其中的实现类

  • 问题:
  • 即使将引用的 Copy Local 设置为 True,并且 GAC 中不存在引用的程序集,也不会将引用的程序集复制到输出构建目录
  • Ninject 随后找不到程序集,因此绑定(bind)/解析失败

  • 此过程适用于直接引用引用程序集中的某些类以及由 Ninject 加载的相同设置,因此我认为原因如下:如果 VS 检测到代码中没有引用引用程序集中的类型,它不会复制引用的程序集,即使它是使用 Copy Local = True 作为引用添加的。

    解决方案:
  • 找到一种方法告诉 VS,“复制本地(我是认真的)”= True——这将是我理想的解决方案。
  • 添加对被引用程序集的文件引用。不太好,因为我失去了项目引用的优势(这可能完全在我的脑海中,也可能不完全在我的脑海中)。
  • 在代码中以某种“ token ”方式引用程序集。凌乱 - 我想使用引用列表来维护我想要包含的程序集/模块的列表。
  • 复制程序集的构建后步骤。凌乱,不理想。

  • 任何人都可以帮助解决第一个解决方案,或建议另一个解决方案吗?

    最佳答案

    如果您部署/复制包含对在 GAC 中注册的自定义组件的引用的应用程序,则无论“复制本地”设置如何,该组件都不会随应用程序一起部署/复制。 See MSDN

    您必须通过添加 来强制将本地复制为真。私有(private) 元数据到 GAC 程序集引用。编辑您的项目文件并添加私有(private) 元数据:

    <Reference ..>
        <Private>True</Private>
    </Reference ..>
    
    <ProjectReference ..>
        <Private>True</Private>
    </ProjectReference ..>
    

    现在应该从输出文件夹中复制/删除您的 GAC 程序集。

    关于.net - 除非在代码中引用,否则通过添加引用添加的程序集不会复制到输出目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8670744/

    相关文章:

    sql - 如何使用 PowerShell 从 Connectionstring 获取数据源?

    c++ - 使用 .def 或 __declspec(dllexport) 导出跨平台代码的共享库符号?

    c++ - DEV C++ 编译但 Visual Studio 不

    c++ - Visual Studio - 在停止调试时终止特定进程 (Shift+F5)

    tfs - MSBuild 会因为 Windows 工作流而消亡吗?

    c# - 如何使用 MSBuild 脚本确定构建来源?

    c# - 将选定的列表框(绑定(bind))项目保存到 C# 中的数组

    .net - 捕获 ADO.net DB 查询运行时

    wpf - Clickonce 应用程序文件引用了错误的部署代码库路径

    .net - ISV 公司的最佳 SAP 集成实践?