当Net Framework引用Net Standard Library时出现“无法加载文件或程序集”错误

13

我对netstandard非常新,并且在运行具有对netstandard库的引用的.Net Framework(控制台)的调试模式时遇到了异常。

方案结构

异常

后来我发现,如果我在.Net Framework项目上安装System.IO.Ports ,就可以解决这个异常问题。但是这个库已经安装在netstandard项目中。

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

我一定漏掉了些什么,请熟悉netstandard的人给我一些见解。

非常感谢您的帮助!


如果您在VS中打开“解决方案资源管理器”并查看引用,不是所有引用都会加载以保持可执行文件的小型化。您可以通过转到菜单:项目:添加引用:.Net并选择缺失的引用来始终添加缺失的引用,该引用位于安装了Net库时的Windows文件夹中。添加引用只是告诉编译器在构建中包含它,并不实际加载任何内容。System.IO.Ports是Net的一部分,而不是nuget。 - jdweng
我在我的应用程序中遇到了相同的问题 - 在.NET Standard类库项目中安装的包依赖项不会自动引用到使用它们的.NET Core或.NET Framework应用程序中。我只是认为这就是情况所在,需要在那里单独安装依赖项。 - mason
是的,你必须手动添加引用。 - Alexander Petrov
1个回答

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

请查看Scott Hanselman的这篇关于问题原因和解决方案的文章:article
从文章中可以得知:
“完整版”框架项目使用较旧的.csproj格式,并默认使用package.config来管理依赖项。新er的项目可以将Packages作为一级引用。因此,我们需要告诉此解决方案中的所有项目以“PackageReferences”管理并还原其包。
编辑:
对于新项目,这个修复方法完美地奏效了。当我在该新项目中恢复软件包之前应用它到csproj时,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>

使用 <RestoreProjectStyle>PackageReference</RestoreProjectStyle> 后是否会有任何副作用? - Steven Li
当我创建一个新的.NET项目并将库托管在其中时,它对我来说运行得很好。但是,当我尝试将此修复方法应用于现有项目时,遇到了相同的错误。 - Ahmed Mansour

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接