第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

條件編譯和框架目標(biāo)

條件編譯和框架目標(biāo)

小唯快跑啊 2019-07-22 15:33:19
條件編譯和框架目標(biāo)如果目標(biāo)框架是一個(gè)較新的版本,那么我的項(xiàng)目的代碼可能會(huì)在一些次要的地方得到大幅度的改進(jìn)。我希望能夠更好地利用C#中的條件編譯來根據(jù)需要切換它們。類似于:#if NET40using FooXX = Foo40;#elif NET35using FooXX = Foo35;#else NET20using FooXX = Foo20;#endif這些符號中有免費(fèi)的嗎?是否需要將這些符號作為項(xiàng)目配置的一部分注入?似乎很容易做到,因?yàn)槲覍⒅滥膫€(gè)框架是針對MSBuild的。/p:DefineConstants="NET40"最新情況:我的問題是,人們是如何處理這種情況的?您正在創(chuàng)建不同的配置嗎?您是否通過命令行傳入常量?
查看完整描述

3 回答

?
偶然的你

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊

實(shí)現(xiàn)這一目標(biāo)的最佳方法之一是在項(xiàng)目中創(chuàng)建不同的構(gòu)建配置:

<PropertyGroup Condition="  '$(Framework)' == 'NET20' ">
  <DefineConstants>NET20</DefineConstants>
  <OutputPath>bin\$(Configuration)\$(Framework)</OutputPath></PropertyGroup><PropertyGroup Condition="  '$(Framework)' == 'NET35' ">
  <DefineConstants>NET35</DefineConstants>
  <OutputPath>bin\$(Configuration)\$(Framework)</OutputPath></PropertyGroup>

在您的默認(rèn)配置中:

<Framework Condition=" '$(Framework)' == '' ">NET35</Framework>

這將設(shè)置默認(rèn)的,如果它不是在其他地方定義的。在上述情況下,每次生成每個(gè)版本時(shí),OutputPath都會(huì)為您提供一個(gè)單獨(dú)的程序集。

然后創(chuàng)建一個(gè)AfterBuild目標(biāo)來編譯您的不同版本:

<Target Name="AfterBuild">
  <MSBuild Condition=" '$(Framework)' != 'NET20'"
    Projects="$(MSBuildProjectFile)"
    Properties="Framework=NET20"
    RunEachTargetSeparately="true"  /></Target>

此示例將在第一次構(gòu)建后將Framework變量設(shè)置為NET 20重新編譯整個(gè)項(xiàng)目(編譯兩者,并假設(shè)第一個(gè)構(gòu)建是上面所述的默認(rèn)NET 35)。每個(gè)編譯都將正確設(shè)置條件定義值。

通過這種方式,您甚至可以將項(xiàng)目文件中的某些文件排除在外,如果您希望w/o必須使用#ifdef文件:

<Compile Include="SomeNet20SpecificClass.cs" Condition=" '$(Framework)' == 'NET20' " />

甚至是參考資料

<Reference Include="Some.Assembly" Condition="" '$(Framework)' == 'NET20' " >
  <HintPath>..\Lib\$(Framework)\Some.Assembly.dll</HintPath></Reference>


查看完整回答
反對 回復(fù) 2019-07-22
?
慕沐林林

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊

到目前為止,我使用的另一種方法是將以下內(nèi)容添加到項(xiàng)目文件中:

 <PropertyGroup>
    <DefineConstants Condition=" !$(DefineConstants.Contains(';NET')) ">$(DefineConstants);$(TargetFrameworkVersion.Replace("v", "NET").Replace(".", ""))</DefineConstants>
    <DefineConstants Condition=" $(DefineConstants.Contains(';NET')) ">$(DefineConstants.Remove($(DefineConstants.LastIndexOf(";NET"))));$(TargetFrameworkVersion.Replace("v", "NET").Replace(".", ""))</DefineConstants>
  </PropertyGroup>

這使用TargetFrameworkVersion屬性的值,它類似于“v3.5”,替換了“v”和“。獲得“NET 35”(使用新的屬性函數(shù)特征)。然后刪除任何現(xiàn)有的“NETxx”值,并將其添加到DefinedConstants的末尾。這也許是可能的精簡,但我沒有時(shí)間去小提琴。

在VS中查看項(xiàng)目屬性的Build選項(xiàng)卡,您將在條件編譯符號部分看到結(jié)果值。更改應(yīng)用程序選項(xiàng)卡上的目標(biāo)框架版本,然后自動(dòng)更改符號。然后你可以用#if NETxx預(yù)處理指令以通常的方式。在VS中更改項(xiàng)目似乎不會(huì)丟失自定義PropertyGroup。

請注意,這并沒有為客戶端配置文件目標(biāo)選項(xiàng)提供任何不同的選項(xiàng),但這對我來說不是一個(gè)問題。


查看完整回答
反對 回復(fù) 2019-07-22
?
慕后森

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊

我對這些解有問題,可能是因?yàn)槲业某跏汲?shù)是由這些屬性預(yù)先建立的。

<DefineConstants /><DefineDebug>true</DefineDebug><DefineTrace>true</DefineTrace><DebugSymbols>true</DebugSymbols>

VisualStudio 2010還因?yàn)榉痔柖鴴伋鲆粋€(gè)錯(cuò)誤,聲稱它們是非法字符。錯(cuò)誤消息給了我一個(gè)提示,因?yàn)槲铱梢钥吹筋A(yù)先構(gòu)建的常量由逗號分隔,最后是我的“非法”分號。經(jīng)過一些調(diào)整和按摩后,我想出了一個(gè)適合我的解決方案。

<PropertyGroup>
  <!-- Adding a custom constant will auto-magically append a comma and space to the pre-built constants.    -->
  <!-- Move the comma delimiter to the end of each constant and remove the trailing comma when we're done.  -->
  <DefineConstants Condition=" !$(DefineConstants.Contains(', NET')) ">$(DefineConstants)$(TargetFrameworkVersion.Replace("v", "NET").Replace(".", "")), </DefineConstants>
  <DefineConstants Condition=" $(DefineConstants.Contains(', NET')) ">$(DefineConstants.Remove($(DefineConstants.LastIndexOf(", NET"))))$(TargetFrameworkVersion.Replace("v", "NET").Replace(".", "")), </DefineConstants>
  <DefineConstants Condition=" $(TargetFrameworkVersion.Replace('v', '')) >= 2.0 ">$(DefineConstants)NET_20_OR_GREATER, </DefineConstants>
  <DefineConstants Condition=" $(TargetFrameworkVersion.Replace('v', '')) >= 3.5 ">$(DefineConstants)NET_35_OR_GREATER</DefineConstants>
  <DefineConstants Condition=" $(DefineConstants.EndsWith(', ')) ">$(DefineConstants.Remove($(DefineConstants.LastIndexOf(", "))))</DefineConstants></PropertyGroup>

我會(huì)發(fā)布高級編譯器設(shè)置對話框的屏幕截圖(單擊“高級編譯選項(xiàng).”打開)。按鈕在項(xiàng)目的“編譯”選項(xiàng)卡上)。但作為一個(gè)新用戶,我缺乏這樣做的代表。如果你能看到截圖,你會(huì)看到自定義常量自動(dòng)填充的屬性組,然后你會(huì)說,“我要給我一些?!?/trans>



查看完整回答
反對 回復(fù) 2019-07-22
  • 3 回答
  • 0 關(guān)注
  • 594 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號