【问题记录】—.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编译时,所引用的包缓存中的包内容,重新编译;问题解决。