【发布时间】:2018-03-15 19:20:40
【问题描述】:
我已经构建了一个 NuGet 包,用于打包托管和非托管依赖项,其中一些是运行时依赖项,因此我的 .targets 文件中有几个目标用于 NuGet 文件,这些目标将这些依赖项复制到项目的 bin 文件夹使用 NuGet 包,我希望消费者不必在他们的 .csproj 文件中手动插入 CallTarget 节点。
我的包的 .targets 文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="CopyDeviceIntegrationNativeDependencies">
<Message Text="Copying Device Integration native dependencies to $(OutDir)..." Importance="high" />
<ItemGroup>
<TDDeviceIntegrationNativeDependencies Include="$(MSBuildProjectDirectory)\..\Packages\TDDeviceIntegration*\lib\native\**\*.*" />
</ItemGroup>
<Copy SourceFiles="@(TDDeviceIntegrationNativeDependencies)" DestinationFiles="@(TDDeviceIntegrationNativeDependencies->'$(OutDir)\%(Filename)%(Extension)')" ></Copy>
</Target>
<Target Name="CopyDeviceIntegrationContentDependencies">
<Message Text="Copying Device Integration content dependencies to $(OutDir)..." Importance="high" />
<ItemGroup>
<TDDeviceIntegrationContentDependencies Include="$(MSBuildProjectDirectory)\..\Packages\TDDeviceIntegration*\content\**\*.*" />
</ItemGroup>
<Copy SourceFiles="@(TDDeviceIntegrationContentDependencies)" DestinationFiles="@(TDDeviceIntegrationContentDependencies->'$(OutDir)\%(Filename)%(Extension)')" ></Copy>
</Target>
<Target Name="CopyDeviceIntegrationManagedDependencies">
<Message Text="Copying Device Integration managed dependencies to $(OutDir)..." Importance="high" />
<ItemGroup>
<TDDeviceIntegrationManagedDependencies Include="$(MSBuildProjectDirectory)\..\Packages\TDDeviceIntegration*\lib\*.*" />
</ItemGroup>
<Copy SourceFiles="@(TDDeviceIntegrationManagedDependencies)" DestinationFiles="@(TDDeviceIntegrationManagedDependencies->'$(OutDir)\%(Filename)%(Extension)')"></Copy>
</Target>
</Project>
我的消费 .csproj 文件需要在其中包含这些副本才能发生这些副本:
<Target Name="AfterBuild">
<CallTarget Targets="CopyDeviceIntegrationNativeDependencies" />
<CallTarget Targets="CopyDeviceIntegrationContentDependencies" />
<CallTarget Targets="CopyDeviceIntegrationManagedDependencies" />
</Target>
考虑到这个 .csproj 文件中只能有一个 AfterBuild 目标(据我所知),无论如何我可以在安装 NuGet 包时为消费者插入那些 CallTarget 节点这样消费者就不必手动添加它们了吗?我从未遇到过强制消费者在安装后必须更改其 .csproj 文件的 NuGet 包。
谢谢!
【问题讨论】:
标签: c# msbuild nuget nuget-package target