我正在开发一个内部NuGet包,它会添加一个预构建事件。
它通过根据documentation指定包含MyPackage.props文件的构建文件夹来实现此目的。
以下是道具文件的内容:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PreBuildEvent>Some commands go here</PreBuildEvent>
</PropertyGroup>
</Project>
如果项目从未进行过预构建事件,则会创建事件。但是,如果csproj文件中存在现有的PerBuildEvent元素,则不会填充新值。如果我打开csproj文件并手动删除相应的PropertyGroupElement,我可以让它工作:
<PropertyGroup>
<PreBuildEvent>Some command line stuff</PreBuildEvent>
</PropertyGroup>
但是,我必须从那里删除,因为只是在UI中删除预构建事件的内容不允许写入新值。
我希望在install.ps1中使用基于约定的方法,因为documentation指定:
[NuGet 3.x] This script will not be executed in projects managed by project.json
...(我以前把这部分留了出去)有没有办法在没有csproj文件时这样做?
发生了什么事?
答案 0 :(得分:1)
我建议您不要在.props中使用prebuild事件,因为我希望您不想覆盖项目中的现有事件。
相反,您可以使用另一个目标,以便在构建之前使用BeforeTargets运行逻辑:
<Target Name="MyBeforeBuild" BeforeTargets="Build">
<Message Text="### MyBeforeBuild ###" Importance="high" />
</Target>
如果您需要在其他目标之后运行预构建事件,您可能还需要查看使用DependsOnTargets属性。
<Target Name="MyTarget" DependsOnTargets="$(CoreCompileDependsOn)">
</Target>