【发布时间】:2020-09-12 00:20:43
【问题描述】:
我有一个带有一些 NuGet 依赖项的项目,使用 PackageReference:
<ItemGroup>
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.19" />
</ItemGroup>
我不希望将依赖项直接安装在bin\${buildConfiguration}\${framework}文件夹中(括号中的文件()):
bin
Debug
net472
(MyLibrary.dll)
(Microsoft.CSharp.dll)
(Microsoft.Xaml.Behaviors.Wpf.dll)
相反,我希望每个构建的依赖项位于更深的子文件夹中,如下所示:
bin
Debug
net472
(MyLibrary.dll)
MyLibrary
(Microsoft.CSharp.dll)
(Microsoft.Xaml.Behaviors.Wpf.dll)
我知道我可以使用nuget.config 文件来控制解决方案包的下载位置,但 NuGet 依赖项的构建输出保持不变—— bin/release/framework 文件夹。
请注意,我想要的不仅仅是移动文件,这可以通过构建后步骤来完成,而且不是很有用。我需要在构建时更改对依赖 DLL 的引用以引用子文件夹而不是根文件夹;所以我可以将根文件夹的全部内容作为一个整体复制到不同的位置,并且仍然可以工作。
MyLibrary.dll 是使用 SDK 格式的项目构建的,该项目使用 PackageReference;它可以是 .NET Framework、.NET Core 或 .NET Standard。
我该怎么做?
一些背景
我编写了一个 Visual Studio debugging visualizer for expressions。调试可视化工具是手动复制的单个 DLL - 连同它们的依赖项 - 到 Documents 下的特定子文件夹 - 例如Visual Studio 2019\Visualizers -- 或 VS 安装文件夹的 Visualizers 子文件夹。
如果有两个可视化工具依赖于同一个库的不同版本,则其中一个可能会损坏。删除可视化工具是一件容易发生的事情,因为它会删除不需要的依赖项。
在为 .NET Core 或 .NET Standard 编写可视化工具时,需要创建多个 DLL;这些 DLL 中的每一个都可能有自己的依赖项。
如果可以将依赖项输出到同名的子文件夹,那将是朝着正确方向迈出的一步。
(Developer community feature request 和(现已关闭)request to document better solutions to this problem)
【问题讨论】: