2012-04-20 6 views
2

解決策の中で複数のプロジェクトに使用したいAfterBuildターゲットがあります。ターゲットを.targetsファイルに置き、各プロジェクトのファイルを参照できる方法がありますか?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

使用この

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

$(MSBuildThisFile) =現在のプロジェクトファイル。
$(MSBuildThisFileDirectory) =現在のプロジェクトファイルを含むディレクトリ。

プロジェクトファイルの相対パスは、プロジェクトファイルの呼び出し内容によっては使いにくいものです。 msbuildを直接使用すると、相対パスはプロジェクトファイルに解決されます。 VSを使用すると、相対パスはソリューションファイルをベースパスとして使用します。

$(MSBuildThisFileDirectory)を使用すると、相対パスが所定の開始パスを使用するよう強制されます。あなたがする必要があるのは、相対パスの残りの部分を埋めることだけです。

+0

ありがとう、私はこれをあきらめていたが、それはうまくいった。 –

1

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

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

のMSBuild myproj.proj/V:DIAG

+0

これはコマンドラインからは動作しますが、Visual Studioからビルドすると機能しません。どのような視覚スタジオが異なったやり方をしているのか? –

+0

@ e82.eric - 右。私はそれを逃したとは信じられません。あなたの相対パスが間違っているからです。ターゲットファイルをプロジェクトフォルダに保存するか、既知のパスを使用してください。コマンドラインから起動すると、パスは正しく解決されますが、VSではソリューションフォルダから開始されます。 –

+0

私は実際のパスに変更しようとしました。 VSからはまだ動作しませんでした。 –

関連する問題