特定のクラスを除いて、条件付きでプロジェクトをコンパイルしたいと思います。出来ますか?
アップデート:
基本的に私が探しているのは、特定のクラス(個別の.csファイルに格納されている)とそのすべての依存関係でコンパイルしないことにより、コマンドラインディレクティブを介して結果の.xapファイルのサイズを減らすことです。
これは、 MSDNが手動で行うことを推奨する方法です。自動化された方法で条件付きでそれを行う方法があれば、それは完璧な解決策になるでしょう。
特定のクラスを除いて、条件付きでプロジェクトをコンパイルしたいと思います。出来ますか?
アップデート:
基本的に私が探しているのは、特定のクラス(個別の.csファイルに格納されている)とそのすべての依存関係でコンパイルしないことにより、コマンドラインディレクティブを介して結果の.xapファイルのサイズを減らすことです。
これは、 MSDNが手動で行うことを推奨する方法です。自動化された方法で条件付きでそれを行う方法があれば、それは完璧な解決策になるでしょう。
プロジェクトファイルProjectName.cproj
は、プロジェクトのプロパティとコンパイラの指示を含むプレーンなxmlファイルです。含めるファイルは<ItemGroup>...</ItemGroup>
タグの間にリストされています。<ItemGroup>
そのようなリストは1つ以上存在する可能性があります。したがって、あなたがしなければならないのは、条件付きでコンパイルしたいファイルを別のものに入れ、<ItemGroup>
属性として条件を追加することです。
<ItemGroup Condition=" '$(BUILD)' == 'IMAGE' ">
<Compile Include="PngEncoder\Adler32.cs" />
<Compile Include="PngEncoder\CRC32.cs" />
<Compile Include="PngEncoder\Deflater.cs" />
<Compile Include="PngEncoder\DeflaterConstants.cs" />
<Compile Include="PngEncoder\DeflaterEngine.cs" />
<Compile Include="PngEncoder\DeflaterHuffman.cs" />
<Compile Include="PngEncoder\DeflaterOutputStream.cs" />
<Compile Include="PngEncoder\DeflaterPending.cs" />
<Compile Include="PngEncoder\IChecksum.cs" />
<Compile Include="PngEncoder\PendingBuffer.cs" />
<Compile Include="PngEncoder\PngEncoder.cs" />
</ItemGroup>
BUILD
これで、このファイルのグループは、の名前と値で定義されたプロパティがある場合にのみ含まれます"IMAGE"
。プロパティは、プロジェクトファイル自体で定義できます。
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
...
</PropertyGroup>
または、コマンドラインから渡されます。
msbuild ProjectName.cproj /p:BUILD=IMAGE
msbuild.exe
.NETFrameworkが付属しています。
ConditionalAttribute
これには次のものを使用できます。
指定された条件付きコンパイルシンボルが定義されていない限り、メソッド呼び出しまたは属性を無視する必要があることをコンパイラーに示します。
[Conditional("SomeCondition")]
public void WillCompileOnlyIfSomeConditionIsDefined()
{
}
別の方法は、プリプロセッサディレクティブを使用することです。
#if !SomeCondition
// will only compile if SomeCondition is false
#endif
Visual Studio Onlineを使用したビルドでは、ItemGroup要素で条件属性が無視されます。
ここで説明するように、属性の使用When/Choose/Otherwise
がサポートされています。
<Choose>
<When Condition="'$(Configuration)' == 'Debug With Project References'">
<ItemGroup>
<ProjectReference Include="..\SomeProject\SomeProject.csproj">
<Project>{6CA7AB2C-2D8D-422A-9FD4-2992BE62720A}</Project>
<Name>SomeProject</Name>
</ProjectReference>
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<Reference Include="SomeProject">
<HintPath>..\Libraries\SomeProject.dll</HintPath>
</Reference>
</ItemGroup>
</Otherwise>
</Choose>