2011-09-21 6 views
7

これはおそらくFAQですが、多くの検索を行っても解決策を見つけることはできませんでした。msbuild内の項目を別のファイルにコンパイルすると、

私たちは、すべて同じソースファイルセットで動作するいくつかのmsbuildファイルを持っています。これらのファイルを少し簡単に管理するために、<Compile>のソースファイル名を別のファイルに移動し、すべてのmsbuildファイルから参照したいと考えています。我々は、<Compile>アイテムを含む新しいファイルに貼り付け、そして

<Project DefaultTargets="Build" ToolsVersion="3.5"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

、次いで

<Import Project="Common.files.csproj" />

と原稿から、そのファイルを参照すると、それを取り囲む <ItemGroup>を切断しようとした

しかし、それは動作しません - ソリューションが開きます(デフォルト設定をハックしたので警告が表示されます)、buソリューションエクスプローラに項目が表示されません。

私たちは間違って何をしていますか?

+0

「すべてのファイルを表示」を選択するとどうなりますか? – mellamokb

+1

@mellamokb:それは問題ではありません - すべてのファイルを表示するだけでディスクにあるものを表示するように切り替えます。私は確かにそれを試みました。 – bright

答えて

10

1)外部.proj(または.TARGET)ファイルを作成し、ファイルを追加は、(私は別の項目名を使用するが、それは問題ではありません)

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup> 
     <ExternalCompile Include="Program.cs" /> 
     <ExternalCompile Include="Properties\AssemblyInfo.cs" /> 
    </ItemGroup> 
</Project> 

2)Visual Studioプロジェクトファイルの先頭に外部.projファイルをインポートします。

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="MyExternalSources.proj" /> 
    <PropertyGroup> 
    ... 

とを変更

... 
<ItemGroup> 
    <Compile Include="@(ExternalCompile)" /> 
</ItemGroup> 
... 

警告: - のVisual Studio内から追加されたすべてのアイテム/ファイルは、このように終わるだろうあなたの外部.projファイルに新しいアイテム/ファイルを追加する必要があります。このようItemGroup :

... 
<ItemGroup> 
    <Compile Include="@(ExternalCompile)" /> 
    <Compile Include="MyNewClass.cs" /> 
</ItemGroup> 
... 
+0

Excellent 、それは動作します。はい、アイテムを手作業で追加する必要はありませんが、通常どおり追加してから、チェックインする前に外部ファイルに移動することができます。 – bright

+0

と同じテクニックを試しましたが、うまくいかないようです。誰かがコンテンツの「デフォルト」セットをインポートする方法を知っていますか?既存のOSSを使用しているときにWebアプリケーションに準拠していました。 – uniquelau

+0

@uniquelauファイルが "main"プロジェクトフォルダの外にあるときに問題を解決しようとしました。私が "静的な"コンテンツをプロジェクトフォルダに移動するとすぐに、それは 'Content' ItemGroupと同じように機能しました。私の解決策は実際には回避策に過ぎず、VSプロジェクトファイルを調整する方法を示しています。たぶんカスタムのポストビルドタスクが、あなたのケースで静的なコンテンツを動かすことができるかもしれません。 – Filburt

0

「インクルード」ファイルがMSBuildで動作することはありません。明らかにターゲットファイルはこのように動作しますが、別のファイルに含まれる部分的なmsbuildファイルは見ていません。あなたはこれに例示されているような方法を使いましたか?
http://msdn.microsoft.com/en-us/library/ms171454(VS.80).aspx

ワイルドカードを使用する方法はこれまで私がこれまで対処してきた方法です。 Visual Studio 2010で試してみました

+0

ありがとうございますが、私はまだ解決策を考えています。他のすべてが失敗した場合、これは最後の手段かもしれませんが、最適ではありません。 – bright

+0

また、独自のカスタムファイル解析と組み合わせたCreateItemタスクを使用して、BeforeBuildターゲット中に項目をCompile ItemGroupに追加することもできます。http://msdn.microsoft.com/en-us/library/s2y3e43x.aspx –

関連する問題