通过dotnet new web创建web项目
默认web项目Microsoft.NET.Sdk.Web,netcoreapp3.1生成的的是可执行文件,默认不能pack如需pack需要增加配置
<IsPackable>true</IsPackable>
Wind.GFS.WebPathMapDNC.csproj:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <!--<OutputType>library</OutputType>--> <IsPackable>true</IsPackable></span> <TargetFramework>netcoreapp3.1</TargetFramework> <DefineConstants>$(DefineConstants)</DefineConstants> <RestoreSources>http://...</RestoreSources> </PropertyGroup> <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <DefineConstants>DEBUG</DefineConstants> </PropertyGroup> <ItemGroup> <PackageReference Include="log4net" Version="2.0.8" /> <PackageReference Include="Wind.GFS.ClientDNC" Version="1.0.2.35660" /> </ItemGroup> </Project>
在linux环境dotnet publish和dot pack时,是没有问题的。publish会生成可执行文件,pack会生成nupkg包。
直接引用包:dotnet add package Wind.GFS.WebPathMapDNC -v 1.0.2.41237 即可。
但是在软件仓库编译会有问题。
因为软件仓库是win环境编译,而publish时不能指定runtime,生成的可执行文件是exe文件,在linux下无法执行。
引用的包,在linux下 dotnet build会报错:
解决办法:
1.通过对csproj增加设置:<OutputType>library</OutputType>这样就不会生成exe可执行文件了。但这样就不能通过dotnet Wind.GFS.WebTest.dll启动web服务了。
2.通过修改obj/porject.assets.json资产文件。删除掉Wind.GFS.WebPathMapDNC.exe相关行。这样就可以dotnet build了。
3.通过dotnet add package Wind.GFS.WebPathMapDNC -v 1.0.2.41237取得的nuget包。找到包位置,删除掉Wind.GFS.WebPathMapDNC.exe;同时删除掉obj/porject.assets.json资产文件。
再通过命令dotnet add package Wind.GFS.WebPathMapDNC -v 1.0.2.41237,重新生成obj/porject.assets.json资产文件
因为,前面已经取得nuget包了,再次执行命令不会再去取nuget包,只会用原来的缓存CACHE文件,但这个缓存文件我们已经将Wind.GFS.WebPathMapDNC.exe删除掉了。那么新生成的obj/porject.assets.json资产文件将不会有Wind.GFS.WebPathMapDNC.exe相关的配置了。其实与2的解决办法异曲同工而已。
 
dotnet core 创建web服务:等您坐沙发呢!