【问题标题】:Could not load file or assembly When Net Framework reference a Net Standard Library当网络框架引用网络标准库时无法加载文件或程序集
【发布时间】:2018-12-08 04:32:15
【问题描述】:

我对 netstandard 很陌生,当我想运行一个引用 netstandard 库的 .Net Framework(控制台)调试模式时遇到了异常。

所以我后来发现如果我将 System.IO.Ports 从 nuget 安装到 .Net Framework 项目上,异常就会消失。但是这个库已经安装到 netstandard 项目上。

因此,如果我使用来自另一个 .net 框架项目的 netstandard 项目,我非常怀疑是否需要安装 netstandard 项目所需的所有库。

我一定遗漏了一些东西,任何熟悉 netstandard 的人都可以给我一些关于它的见解。

非常感谢您的意见!

【问题讨论】:

  • 如果您在 VS 中打开解决方案资源管理器并查看引用,则并非所有引用都已加载以保持可执行文件较小。您始终可以通过转到菜单来添加缺少的参考:项目:添加参考:.Net 并选择安装网络库时 Windows 文件夹中的缺失参考。添加引用只是告诉编译器包含在构建中,实际上并没有加载任何内容。 System.IO.Ports 是 Net 的一部分,而不是 nuget。
  • 我的应用程序有相同的行为 - 安装在 .NET Standard 类库项目中的包依赖项不会在使用的 .NET Core 或 .NET 框架应用程序中自动引用。我只是假设它是这样的,我需要在那里单独安装依赖项。
  • 是的,您必须手动添加引用。

标签: c# .net .net-core


【解决方案1】:

打开托管 .Net 标准库的 .Net Framework 项目的 .csproj 文件,并在第一个 <PropertyGroup> 中添加此行,如下所示更改还原样式:

<RestoreProjectStyle>PackageReference</RestoreProjectStyle>

查看 Scott Hanselman 撰写的 article,了解问题的原因和解决方法。

来自文章:

“完整”框架项目使用旧的 .csproj 格式,默认情况下,它们使用 package.config 来管理依赖项。较新的项目可以将包作为一流的参考。所以我们需要告诉这个解决方案中的所有项目来管理和恢复他们的包作为“PackageReferences”。

编辑:

此修复对我的新项目非常有效。当我在恢复该新项目中的包之前将其应用于 csproj 时,nuget 会获得正确的引用。

将其应用于现有项目时,它不起作用。 .net 标准类库中引用的库不是由 nuget 提取的,因此仍会引发相同的错误。

要修复它,试试这个:

  1. 打开 csproj。你会注意到你的图书馆是这样的
<Reference Include="yournetstandardlibrary, Version=1.0.1.0, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\packages\yournetstandardlibrary\lib\netstandard2.0\.dll</HintPath>
    </Reference>
  1. 删除该引用
  2. 改为添加此引用
 <ItemGroup>
     <PackageReference Include="yournetstandardlibrary">
       <Version>1.0.1</Version>
     </PackageReference>   
  </ItemGroup>

【讨论】:

  • 使用PackageReference后有什么副作用吗?
  • 在创建新的 .net 项目并将库托管在其中时,它对我来说工作得很好。将此修复应用于现有项目时,我遇到了同样的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
  • 2010-11-23
相关资源
最近更新 更多