<em id="3iliw"></em>
  • <progress id="3iliw"></progress>
  • <tbody id="3iliw"><pre id="3iliw"></pre></tbody><dd id="3iliw"><noscript id="3iliw"></noscript></dd>

    <progress id="3iliw"></progress>

    杭州.net培訓
    達內杭州.net培訓中心

    13175137725

    .NET Core實現項目自動編譯

    • 時間:2018-05-25 14:12
    • 發布:杭州.NET培訓
    • 來源:疑難解答

    一、遇到的問題,以及解決辦法

    1.1 不同平臺的編譯怎么辦

    .NET 可以將dll(或者說是項目)編譯成x86、x64、anycpu 等至少三種平臺代碼。但如果用dotnet build生成項目時,默認是anycpu,需要通過platform參數來執行平臺。

    可是,如果你一個解決方法中即有x86項目、又有anycpu項目可怎么是好呢。解決辦法:創建兩個sln文件,一個用x86平臺的編譯,一個用于anycpu平臺的編譯。

    1.2 傳統.NET Framework項目,怎么用dotnet 進行編譯

    這個問題其實最終的解決辦法也很簡易,就是將.net framework項目直接遷移成dotnet 可編譯的項目。步驟以一個.net 4.6.1項目為例:

    ●傳統的.net framework項目

    ●卸載此項目,并編輯.csproj文件

    當前步驟編輯好的.csproj文件如下:

    net461

    ●移除Properites中的assemblyInfo文件

    因為dotnet 會自動創建assemblyInfo相關的信息文件,如果要自定義,可以找到相關資料進行限制

    注意,少了assemblyinfo.cs文件。

    ●還原相關引用

    生成項目,根據提示引用相關類型,默認調整后的是 類庫 文件,如果需要變成 應用執行程序,可以自己修正即可。

    ●生成并運行

    在還原好依賴項,以及調整好輸出類型后,即可完成 項目的遷移。最終的項目結果:

    以及最終生成的csproj文件:

    <Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>

    <TargetFramework>net461

    <ApplicationIcon />

    <OutputType>Exe

    <StartupObject />

    <PropertyGroup>

    <ItemGroup>

    <ProjectReference Include="..\..\src\SAM.Configuration\SAM.Configuration.csproj" />

    <ProjectReference Include="..\..\src\SAM.Framework\SAM.Framework.csproj" />

    </ItemGroup>

    </Project>

    ●多版本的支持

    如果你需要的項目即能在.net40,.net461, .net core2.0上運行,那就需要做到多版本兼容。方式即為簡單,需要將TargetFramework改為TargetFrameworks,然后多版本用分號隔開即可:

    net461;net40;netcoreapp2.0

    二、統一實現

    在解決了上述三個主要問題之后,實現自動編譯和出包就很簡單。我們可以寫一個ps1文件來實現,也就是powershell腳本,整體代碼如下:

    #定義全局變量

    $destFolder = Get-Location;

    $version = "1.0.0.0-alpha";

    #編譯anycpu的包

    $anycpuPath = $destFolder.Path + "\..\SAM.Framework.anycpu.sln";

    dotnet pack $anycpuPath --output $destFolder.Path /p:PackageVersion=$version;

    #編譯x86的包

    $anycpuPath = $destFolder.Path + "\..\SAM.Framework.x86.sln";

    dotnet pack $anycpuPath --output $destFolder.Path /p:PackageVersion=$version /p:platform=x86;

    pause

    是不是很簡單,幾句代碼就是實現將所有項目生成nuget包。且還可以分平臺實現。核心參數說明:

    ●/p:是設置msbuild相關參數的入口,如:包版本(版本在dotnet core上好像此支持三個階段,如:1.0.0這種,而四階段沒有了),以及平臺等。

    ●--output:生成的包輸出文件夾

    此命令還有些不足點,如 anycpu和x86中都編譯同一個項目,后者的編譯會覆蓋前者(感覺可以用nuget包依賴來解決)。

    預約申請免費試聽課

    怕錢不夠?就業掙錢后再付學費!    怕學不會?從入學起,達內定制課程!     擔心就業?達內多家實踐企業供你挑選!

    上一篇:.NET跨平臺實踐用C#開發Linux守護進程
    下一篇:ASP.NET Core 學習手冊
    • 掃碼領取資料

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2018 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    江西省

    貴州省

    廣西省

    海南省

    国拍自产亚洲 2019国拍自产在线,国拍自产亚洲,国产a在线不卡 百度 好搜 搜狗
    <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>