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

 最近在協助驗證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編譯時,所引用的包快取中的包內容,重新編譯;問題解決。

 

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