gpt4 book ai didi

c# - .net 核心添加一个 .net 标准 dll 作为引用

转载 作者:行者123 更新时间:2023-11-30 23:03:35 25 4
gpt4 key购买 nike

创建.net标准dll,命名为Paas dll,修改输出路径..\输出\

添加一个类记录器,如下所示-

 public class Logger 
{
public void LogMessage()
{
Console.Write("test");
}
}

现在在解决方案中创建另一个 .net 核心控制台项目并添加 dll 作为 pass.dll 的引用(不是项目引用)并将本地副本设为 false。

同时将控制台应用程序的输出目录更改为 ..\Output\

在控制台应用程序中添加以下代码 -

 var logger = new Logger();
logger.LogMessage();
Console.Read();

构建并运行 .net 核心应用程序,但现在应用程序进入中断模式并出现以下错误

Could not load file or assembly 'Paas, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.

但是,如果您对 .net Framework 4.6.1 项目执行相同的步骤,它会起作用,为什么 .net Core 会存在这种不同的行为,以及如何解决它?

展示此问题的项目的 github 链接 - https://github.com/ankgupta067/DependencyInjection.git

最佳答案

问题是设置 copy local to false.在 .NET Core 上,为了知道应该加载哪些程序集,它使用所谓的 .deps.json。在输出 .dll 旁边生成的文件。为了生成此 .deps.json 文件,.NET Core SDK 检查有关您引用的程序集的信息。它使用的其中一条信息是 Reference 是否为 CopyLocal或不。查看code here .如果您检查控制台应用程序的 .deps.json文件,您会看到没有 Paas.dll 的条目

因此,为了使这项工作正常进行,需要正确编写 .deps.json 文件。使用当前工具,这意味着您将不得不停止将复制本地设置为 false。如果你想为这个场景打开一个问题,请记录它 here .这样它就可以在未来的版本中得到修复。

旧答案:

基于 SDK(“.NET Core 风格”).csproj 项目和传统 .csproj 项目的区别在于,默认情况下,基于 SDK 的项目会将目标框架附加到 <OutputPath>属性(property)。

所以当你说

Also change output directory of console app to ..\Output\

真正发生的是基于 SDK 的网络标准库的输出将变为 ..\Output\netstandard2.0\Paas.dll基于 SDK 的控制台项目的输出将变为 ..\Output\netcoreapp2.0\ .这是 2 个不同的目录,因此运行时找不到库。

要停止此行为,请编辑两个 .csproj 文件并添加:

<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>

<PropertyGroup> 内元素。

这将导致两个项目直接输出到指定的..\Output\文件夹。

关于c# - .net 核心添加一个 .net 标准 dll 作为引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49851844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com