【問題記錄】—.NetCore 編譯問題

chaney1992發表於2020-10-28

 最近在協助驗證Jenkins自動編譯釋出時,對一些.Net Core編譯問題進行了解決;特記錄一下

一、編譯生成netcoreapp目錄問題

  • 問題現象

   .net core專案編譯輸出目錄總是包含在【netcoreapp3.1】目錄下,如圖:

   

  • 解決辦法

   在專案檔案中(*.csproj)中新增節點:<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>

   位置如下:

  <PropertyGroup>
    <OutputType>Library</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies><!--所有依賴檔案拷貝到輸出目錄-->
    <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
    <ApplicationIcon />
    <StartupObject />
    <AssemblyName>CustomReportResolver</AssemblyName>
  </PropertyGroup>

二、編譯語言包問題 

  • 問題現象

    在編譯某些專案時,產生了多個檔案包如下圖:

   

  • 產生原因 

    點開資料夾內,發現為:Microsoft.CodeAnalysis 包產生的檔案(語言包)

   

  • 解決辦法

   繼續在專案檔案中新增節點:<SatelliteResourceLanguages>zh-Hans</SatelliteResourceLanguages>指定語言包;如果不想要語言包可指定一個非語言包名的內容

   最終編譯結果如下:

    

三、Jenkins自動編譯Nuget包還原問題

  • 問題現象

   由於程式中,大量使用了PackageReference方式引用nuget包,在使用Jenkins自動編譯時,則使用 Nuget Restore 後,再使用 dotnet build 編譯包。但是編譯時總是失敗提示以下內容:

   根據問題提示,明確包版本不是最新的導致,然後根據vs中dll目錄中,刪除後,再編譯依舊提示錯誤。

  • 產生原因

   最終在網上找到原因:

通過PackageReference的方式引用在Nuget包還原的時候會在obj目錄下自動生成Nuget包引用的配置檔案project.assets.json*.csproj.nuget.cache*.csproj.nuget.g.props*.csproj.nuget.g.targets

最終通過對比Jenkins和Vs自動編譯時生成內容發現包換成位置不同導致的:

  

  • 解決辦法

 刪除Jenkins編譯時,所引用的包快取中的包內容,重新編譯;問題解決。

 

希望記錄的問題,能解決一些問題

相關文章