【问题标题】:Prevent Visual Studio from duplicating referenced dll防止 Visual Studio 复制引用的 dll
【发布时间】:2020-05-19 07:59:12
【问题描述】:

我正在为我的应用程序(C#、WPF)开发插件系统。我的项目结构是这样的:

Solution 'App'
    Plugins (solution folder)
        Plugin1 project (dll)
        Plugin2 project (dll)
    MainApp project (WPF)
    PluginInterface project (dll)

我编辑了项目的属性,以这种方式在自定义文件夹中构建它们

Build
    Debug
        MainApp.exe
        PluginInterface.dll
        Plugins (folder)
            Plugin1.dll
            Plugin2.dll

由于插件应该实现Iplugin 接口(在PluginInterface 项目中),我将PluginInterface 项目添加到每个插件项目的引用中。但是,这会导致 Visual Studio 在 Plugins 文件夹中构建 PluginInterface.dll 的副本,而 PluginInterface 项目的输出路径只是设置为 Build\Debug。

我还尝试在 Build\Debug(不是项目)中引用 PluginInterface.dll 文件,但结果相同(我没有忘记在构建之前删除所有创建的文件)。

我应该如何防止 Visual Studio 复制 PluginInterface.dll 文件?

【问题讨论】:

  • 你不能 - 它是一个依赖项,所以你需要使用 dll 构建项目,因此它将被放在输出目录中,我也花了一些时间。

标签: c# visual-studio project-reference


【解决方案1】:

之后您始终可以使用 msbuild 任务删除该文件;

https://docs.microsoft.com/en-us/visualstudio/msbuild/delete-task?view=vs-2019

或者使用后期构建脚本;

del $(ProjectDir)\plugins\pluginInterface.dll

【讨论】:

  • 很好,但我更愿意完全阻止它被创建。我想知道为什么要创建它?为什么 Visual Studio 将它复制到任何被引用的地方?
  • @AmirSinaMashayekh 因为这就是它的工作原理。如果您构建具有依赖项(.dll)的程序,则结果程序需要依赖项才能运行。因此它将始终包含在内。不幸的是,到目前为止 - 没有办法抑制或排除它。
  • 你的意思是如果我删除它,我的应用程序将不再工作?由于我的应用程序尚未完成,我现在无法对其进行测试。有没有办法在特定文件夹中使用 dll? (对于插件:..\PluginInterface.dll)
  • @AmirSinaMashayekh 不,我的意思是一般来说,c# 项目的任何输出都只能在其所有依赖项都到位的情况下工作。因此 msbuild(构建引擎)总是输出依赖项(mydep.dll)。所以如果你创建一个项目,添加一个依赖项——它会导致它被添加到输出中,目前没有办法抑制它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
相关资源
最近更新 更多