代码之家  ›  专栏  ›  技术社区  ›  CuriousDeveloper

阻止nuget PostBuildEvent

  •  1
  • CuriousDeveloper  · 技术社区  · 6 年前

    我们依赖一个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中,但这消除了所有PostBuildEvent s,而将来可能会有一个nuget包,我们希望遵守它的PostBuildEvent,我们只是不希望遵守这个特定包的

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   Leo Liu    6 年前

    阻止nuget PostBuildEvent

    如果你不想消除所有 PostBuildEvents ,可以通过从 命令行 对于空字符串:

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

    当然,如果我们想最终解决这个问题,我们仍然需要支持nuget包。你可以移除 .targets 项目文件中的文件 .csproj . 要完成此任务,请卸载项目,找到导入的代码 .目标 文件,例如:

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

    使用此方法,如果要保留项目组提示,则需要将其添加到csproj文件中。

    或者,可以从nuget包中删除此生成事件。从Microsoft Store下载NuGet包资源管理器,打开该NuGet包,双击 .目标 文件并对其进行编辑,删除生成事件:

    enter image description here

    然后把这个保存到 local feed ,从本地源安装nuget包。

    希望这有帮助。