阻止 Visual Studio 在输出目录中复制 Nuget 包

Azz*_*rel 5 .net csproj .net-framework-version visual-studio

免责声明:这是.Net Framework特有的问题,在 .Net Core 中不会发生。

我目前正在开发一个项目,该项目作为一个更大项目的插件。我想将项目的输出路径设置到较大项目的 AddIn 文件夹,然后使用项目的调试属性启动较大的项目,这样我就不必每次都手动复制并附加到项目。

我拥有的任何参考都是与较大的项目共享并从其管理的,这意味着我没有(也不应该)将它们复制到 AddIn 文件夹。

将此答案中的代码包含到我的 .csproj (VS 19/新格式)

  <ItemDefinitionGroup>
  <Reference>
    <Private>False</Private>
  </Reference>
  <ProjectReference>
     <Private>False</Private>
  </ProjectReference>
  </ItemDefinitionGroup>
Run Code Online (Sandbox Code Playgroud)

排除项目和常规引用,但在 .Net Framework 中,我的 Nuget 包中的所有.dll也会复制到输出路径。我也在寻找一种方法来禁用它,但还没有找到。

有没有办法阻止Nuget 包中的.dll被复制到 .Net Framework 中的输出路径?

Hal*_*alo 3

看看这个github 帖子。除此之外,@Maytham 完美地涵盖了它:

为什么不将项目的 nuget 包发布到 AddIn 中?这有帮助吗?

他是对的。那应该有帮助。但是,回顾一下 github 帖子:

您可以关闭每个包的运行时访问:

<ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="12.0.1" ExcludeAssets="runtime" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

或者你可以对所有包执行此操作:

<ItemDefinitionGroup>
    <PackageReference ExcludeAssets="runtime" />
</ItemDefinitionGroup>
Run Code Online (Sandbox Code Playgroud)

完成后,使用不同的输出路径创建一个 CopyNuGetDependency (或任何您想要的名称)项目。确保它引用所有 NuGet 包 - 但不包含ExcludeAssets. 它唯一负责将 NuGet 包直接复制到输出。

这应该可以解决所有问题。