执行由dotnet publish发布的程序集时找不到依赖项

我编写了一个.NET Core 2.0控制台应用程序。使用dotnet publish发布,但是执行过程中出现错误:

运行失败

编译项目

dotnet publish src\Bucket.CLI\Bucket.CLI.csproj -c Release --self-contained false

执行程序

  • bin\Release\netcoreapp2.0\publish
dotnet Bucket.CLI.dll

提示错误:

Error:
  An assembly specified in the application dependencies manifest (Bucket.CLI.dep
s.json) was not found:
    package: 'System.Text.Encoding.CodePages',version: '4.5.1'
    path: 'runtimes/win/lib/netcoreapp2.0/System.Text.Encoding.CodePages.dll'

运行成功

但是,如果我指定--runtime,则不会发生错误:

编译项目

dotnet publish src\Bucket.CLI\Bucket.CLI.csproj -c Release --self-contained false -r win-x64

执行程序

  • bin\Release\netcoreapp2.0\win-x64\publish
dotnet Bucket.CLI.dll

程序运行正常。

这可能是什么原因?


如果我添加要添加的帖子:Bucket.CLI.runtimeconfig.dev.json,则程序可以成功运行。但这是行不通的。还有其他方法吗?

{
  "runtimeOptions": {
    "additionalProbingPaths": [
      "C:\\Users\\menghanyu\\.dotnet\\store\\|arch|\\|tfm|","C:\\Users\\menghanyu\\.nuget\\packages","C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder"
    ]
  }
}

当我添加--runtime进行编译时,没有Bucket.CLI.runtimeconfig.dev.json该程序也运行成功。

我很困惑,为什么会这样?


csproj文件

  • src/Bucket/Bucket.csproj (.net standard2.0)
<Project Sdk="microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <AssemblyVersion>0.0.0.0</AssemblyVersion>
    <FileVersion>0.3.7250.21600</FileVersion>
    <Version>0.3.0+source</Version>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="microsoft.CSharp" Version="4.6.0-preview7.19362.9" />
    <PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
    <PackageReference Include="Newtonsoft.Json.Schema" Version="3.0.11" />
    <PackageReference Include="System.IO.Compression" Version="4.3.0" />
  </ItemGroup>

  <ItemGroup>
      <EmbeddedResource Include="Assets\Schema\**">
      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
    </EmbeddedResource>
    <EmbeddedResource Include="Assets\Signature\**">
      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
    </EmbeddedResource>
  </ItemGroup>

</Project>
  • src/Bucket.CLI/Bucket.CLI.csproj (.net core 2.0)
<Project Sdk="microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <StartupObject>Bucket.CLI.Program</StartupObject>
    <Version>0.3.0+source</Version>
    <AssemblyVersion>0.0.0.0</AssemblyVersion>
    <FileVersion>0.3.7250.21600</FileVersion>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\Bucket\Bucket.csproj" />
  </ItemGroup>

  <ItemGroup>
    <None Update="bucket">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
    <None Update="bucket.bat">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
  </ItemGroup>

</Project>
  • src/Directory.Build.props (public)
<Project>
  <PropertyGroup>
    <IsTestProject>$(MSBuildProjectName.Contains('Tests'))</IsTestProject>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    <WarningsAsErrors />
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
  </PropertyGroup>

  <ItemGroup>
    <AdditionalFiles Include="$(MSBuildThisFileDirectory)stylecop.json" Link="stylecop.json" />
    <Reference Include="GameBox.Console">
        <HintPath>..\..\lib\GameBox.Console\GameBox.Console.dll</HintPath>
    </Reference>
    <Reference Include="GameBox.Semver">
        <HintPath>..\..\lib\GameBox.Semver\GameBox.Semver.dll</HintPath>
    </Reference>
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="microsoft.CodeAnalysis.CSharp" PrivateAssets="all" Version="3.1.0-beta3-final" />
    <PackageReference Include="microsoft.CodeAnalysis.FxCopAnalyzers" PrivateAssets="all" Version="2.9.2" />
    <PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    <PackageReference Include="SonarAnalyzer.CSharp" Version="7.14.0.8411">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
  </ItemGroup>

  <Choose>
    <When Condition="'$(IsTestProject)' == 'true'">
      <PropertyGroup>
        <CodeAnalysisRuleSet>$(MSBuildThisFileDirectory)analysis.test.ruleset</CodeAnalysisRuleSet>
      </PropertyGroup>

      <ItemGroup>
        <PackageReference Include="coverlet.msbuild" Version="2.6.1">
          <PrivateAssets>all</PrivateAssets>
          <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
        </PackageReference>
        <PackageReference Include="microsoft.NET.Test.Sdk" Version="16.1.0" />
        <PackageReference Include="Moq" Version="4.11.0-rc1" />
        <PackageReference Include="MSTest.TestAdapter" Version="2.0.0-beta4" />
        <PackageReference Include="MSTest.TestFramework" Version="2.0.0-beta4" />
      </ItemGroup>
    </When>
    <Otherwise>
      <PropertyGroup>
        <CodeAnalysisRuleSet>$(MSBuildThisFileDirectory)analysis.ruleset</CodeAnalysisRuleSet>
      </PropertyGroup>
    </Otherwise>
  </Choose>
</Project>
  • .NET Core SDK:
.NET Core SDK:
 Version:   3.0.100
 Commit:    04339c3a26

Runtime Environment:
 OS Name:     Windows
 OS Version:  6.1.7601
 OS Platform: Windows
 RID:         win7-x64
 Base Path:   C:\Program Files\dotnet\sdk\3.0.100\

Host (useful for support):
  Version: 3.0.0
  Commit:  95a0a61858
gfhu20010 回答:执行由dotnet publish发布的程序集时找不到依赖项

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3146532.html

大家都在问