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