防止 nuget PostBuildEvent

Prevent nuget PostBuildEvent

我们有一个我们依赖的 nuget 包,但它有一个看起来像这样的 .targets 文件

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Reference Include="PackageName">
      <HintPath>$(MSBuildThisFileDirectory)..\..\sdk\net45\PackageName.dll</HintPath>
    </Reference>
  </ItemGroup>
  <PropertyGroup>
    <PostBuildEvent>
pushd $(MSBuildThisFileDirectory)..\..\sdk\net45\
for /d %%i in (PackageName*) do (
  xcopy "%%i" "$(TargetDir)%%i\" /S /Y
)
popd
    </PostBuildEvent>
  </PropertyGroup>
</Project>

我们不需要也不希望在构建时复制 400 多个文件,那么我们如何才能防止这个特定的 PostBuildEvent?我们已经能够定义

<PropertyGroup> 
    <PostBuildEvent>    
    </PostBuildEvent>   
  </PropertyGroup>

在我们的 csproj 中,但这消除了所有 PostBuildEvents,而未来可能会有一个 nuget 包,我们想要遵守它的 PostBuildEvent,我们只是不想遵守这个特定包的

我们还希望尽可能保留 ItemGroup 提示,但如果需要,我们可以将它们添加到我们的 csproj

Prevent nuget PostBuildEvent

如果您不想消除所有 PostBuildEvents,您可以通过从 命令行 将构建事件设置为空字符串来暂时禁用构建事件:

msbuild foo.sln /p:PreBuildEvent= /p:PostBuildEvent=

当然,要想最终解决这个问题,还是要背nuget包。您可以从项目文件 .csproj 中删除 .targets 文件。为此,卸载您的项目,找到导入 .targets 文件的代码,如:

<Import Project="..\packages\xxx\Build\xxx.targets" Condition="Exists('..\packages\xxx\Build\xxx.targets')" />

如果要保留此方法,您需要将 ItemGroup 提示添加到您的 csproj 文件中。

或者,您可以从 nuget 包中删除此构建事件。从 Microsoft Store 下载 NuGet 包资源管理器,打开该 nuget 包,双击 .targets 文件并编辑它,删除构建事件:

然后将其保存到 local feed,从本地源安装 nuget 包。

希望这对您有所帮助。