4

我有一个 AfterBuild 目标,我想将它用于解决方案中的多个项目。有没有办法可以将该目标放入 .targets 文件并在每个项目中引用该文件。

以下是我尝试过的,似乎不起作用。

项目文件:

<Import Project="..\debug.targets"/>

.目标文件:

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

4

2 回答 2

4

用这个

<Import Project="$(MSBuildThisFileDirectory)\debug.targets"/> 

$(MSBuildThisFile)= 当前项目文件。
$(MSBuildThisFileDirectory)= 包含当前项目文件的目录。

项目文件中的相对路径很难使用,具体取决于调用项目文件的内容。直接使用 msbuild,相对路径将解析为项目文件。使用VS,相对路径将使用解决方案文件作为基本路径。

使用$(MSBuildThisFileDirectory)将强制相对路径使用预先确定的起始路径。您需要做的就是填写相对路径的其余部分。

于 2012-07-27T13:08:35.493 回答
1

您所做的基本上是正确的,但请确保您的 Import 语句是项目文件中的最后一个 Import。

要验证目标是否被正确调用,请从命令行以诊断模式运行 msbuild,并记下有关目标的输出。

msbuild myproj.proj /v:diag

于 2012-04-20T03:44:34.710 回答