防止nuget PostBuildEvent

时间:2018-07-31 15:01:35

标签: c# visual-studio msbuild nuget post-build-event

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

<select onchange="beerFunction(this)">
  <option>Jelen</option>
  <option>Lav</option>
  <option>Jagodinsko</option>
  <option>Nikšićko</option>
</select><br><br>

<h2>Answer:</h2>
<p id="paragraf">
  <script>
  </script>
</p>

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

<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>

在我们的csproj中,但它消除了所有PostBuildEvent,而将来可能会有一个nuget包,我们想服从其PostBuildEvent,我们只是不想服从此特定包的

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

1 个答案:

答案 0 :(得分:0)

  

防止nuget PostBuildEvent

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

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

当然,如果我们想最终解决此问题,我们仍然必须支持nuget软件包。您可以从项目文件.targets中删除.csproj文件。为此,请卸载项目,找到导入的.targets文件的代码,例如:

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

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

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

enter image description here

然后将其保存到local feed,从本地供稿安装nuget软件包。

希望这会有所帮助。