dotnet core 创建web服务

通过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会报错:

dotnet core 创建web服务

解决办法:

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 core 创建web服务

再通过命令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的解决办法异曲同工而已。

 
喜欢 0
分享