jay*_*rjo 5 c# silverlight visual-studio-2010
我想有条件地编译一个不包括特定类的项目.可能吗?
更新:
基本上我正在寻找的是通过不在特定类(存储在单独的.cs文件中)及其所有依赖项中编译来减少通过命令行指令生成的.xap文件的大小.
以下是MSDN建议手动执行此操作的方法.如果有办法以自动方式有条件地做到这一点,那将是一个完美的解决方案.
你可以使用ConditionalAttribute这个:
向编译器指示应忽略方法调用或属性,除非定义了指定的条件编译符号.
[Conditional("SomeCondition")]
public void WillCompileOnlyIfSomeConditionIsDefined()
{
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用预处理程序指令:
#if !SomeCondition
// will only compile if SomeCondition is false
#endif
Run Code Online (Sandbox Code Playgroud)
项目文件ProjectName.cproj是一个纯XML文件,其中包含项目属性和编译器指令。<ItemGroup>...</ItemGroup>标签之间列出了要包含的文件。可以有一个或多个这样的<ItemGroup>列表。因此,您要做的就是将要有条件地编译的文件放在一个单独的文件中,<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>
Run Code Online (Sandbox Code Playgroud)
现在,只有在定义了名称为BUILD和的属性时,才包括这组文件"IMAGE"。可以在项目文件本身中定义属性:
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
...
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
或从命令行传入:
msbuild ProjectName.cproj /p:BUILD=IMAGE
Run Code Online (Sandbox Code Playgroud)
msbuild.exe.NET Framework附带。
| 归档时间: |
|
| 查看次数: |
3467 次 |
| 最近记录: |