我想有條件地編譯一個不包含特定類的項目。可能嗎?C#:是否可以有條件地從編譯中排除一些文件?
UPDATE:
基本上就是我要找的是降低由特定的類別沒有編制(存儲在單獨的.cs文件)和所有導致通過命令行指令.xap文件的大小他們的依賴。
這裏是如何MSDN建議做手工。如果有辦法以自動化的方式有條件地完成它,這將是一個完美的解決方案。
我想有條件地編譯一個不包含特定類的項目。可能嗎?C#:是否可以有條件地從編譯中排除一些文件?
UPDATE:
基本上就是我要找的是降低由特定的類別沒有編制(存儲在單獨的.cs文件)和所有導致通過命令行指令.xap文件的大小他們的依賴。
這裏是如何MSDN建議做手工。如果有辦法以自動化的方式有條件地完成它,這將是一個完美的解決方案。
文件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>
現在這組文件將只包括名稱爲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
自帶.NET框架。
可以使用ConditionalAttribute
此:
表示到,除非指定的條件編譯符號定義一個方法調用或屬性應該被忽略的編譯器。
一種替代方法是使用preprocessor directives:
#if !SomeCondition
// will only compile if SomeCondition is false
#endif
在建立與Visual Studio的在線狀態屬性中的ItemGroup元素忽略。
如上所述here,使用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>
取決於你的意思是「排除」是什麼。 –
我已更新我的問題。 – jayarjo
我不認爲MSIL代碼是那麼大。即使有數千個類,它也不應該超過幾兆字節。我會懷疑你有其他資源,有大filesezes。 – Euphoric