我有一个AfterBuild目标,我想用于解决方案中的多个项目。有没有办法可以将该目标放入.targets文件并引用每个项目中的文件。
以下是我尝试的似乎不起作用的内容。
项目文件:
<Import Project="..\debug.targets"/>
.Targets File:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="AfterBuild">
<PropertyGroup>
<WebsiteDirectory>C:\Inetpub\wwwroot</WebsiteDirectory>
</PropertyGroup>
<ItemGroup>
<output Include=".\**\*.dll" Exclude=".\**\obj\**" />
<output Include=".\**\*.pdb" Exclude=".\**\obj\**" />
<output Include=".\**\*.svc" />
<output Include=".\**\*.xap" />
<output Include=".\**\*.aspx" />
<output Include=".\**\*.js" />
<output Include=".\**\*.config" />
</ItemGroup>
<PropertyGroup>
<VirtualDirectoryPath>$(WebsiteDirectory)\$(RootNamespace)</VirtualDirectoryPath>
</PropertyGroup>
<copy SourceFiles="@(output)" DestinationFiles="@(output->'$(VirtualDirectoryPath)\%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>
答案 0 :(得分:4)
使用此
<Import Project="$(MSBuildThisFileDirectory)\debug.targets"/>
$(MSBuildThisFile)
=当前项目文件。
$(MSBuildThisFileDirectory)
=包含当前项目文件的目录。
项目文件中的相对路径很难使用,具体取决于调用项目文件的内容。直接使用msbuild,相对路径将解析为项目文件。使用VS和相对路径将使用解决方案文件作为基本路径。
使用$(MSBuildThisFileDirectory)
将强制相对路径使用预先确定的起始路径。您需要做的就是填写相对路径的其余部分。
答案 1 :(得分:1)
您所做的事情基本上是正确的,但要确保您的Import语句是项目文件中的最后一个Import。
要验证是否正确调用了目标,请从命令行以diag模式运行msbuild,并记下有关目标的输出。
msbuild myproj.proj / v:diag