4

ソリューション内の複数のプロジェクトに使用したいAfterBuildターゲットがあります。そのターゲットを.targetsファイルに入れて、各プロジェクトでファイルを参照する方法はありますか?

以下は私が試したものですが、うまくいかないようです。

プロジェクトファイル:

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

.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

あなたがしていることは基本的に正しいですが、あなたのインポートステートメントがプロジェクトファイルの最後のインポートであることを確認してください。

ターゲットが正しく呼び出されていることを確認するには、コマンドラインからdiagモードでmsbuildを実行し、ターゲットに関する出力をメモします。

msbuild myproj.proj / v:diag

于 2012-04-20T03:44:34.710 に答える