通过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服务:等您坐沙发呢!