Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从Visual Studio 2017中的.NET Framework 4.5控制台应用程序中引用.NET标准库?_C#_.net_Nuget_Visual Studio 2017_.net Standard - Fatal编程技术网

C# 如何从Visual Studio 2017中的.NET Framework 4.5控制台应用程序中引用.NET标准库?

C# 如何从Visual Studio 2017中的.NET Framework 4.5控制台应用程序中引用.NET标准库?,c#,.net,nuget,visual-studio-2017,.net-standard,C#,.net,Nuget,Visual Studio 2017,.net Standard,我终于安装了Visual Studio 2017.2,并试图让我的第一个项目正常工作,但遇到了一些我希望在此解决的问题 我有一个非常简单的.NET标准库,描述为以下项目文件: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard1.6</TargetFramework> </PropertyGroup> </

我终于安装了Visual Studio 2017.2,并试图让我的第一个项目正常工作,但遇到了一些我希望在此解决的问题

我有一个非常简单的.NET标准库,描述为以下项目文件:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard1.6</TargetFramework>
  </PropertyGroup>

</Project>
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net45</TargetFramework>
  </PropertyGroup>

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

</Project>

netstandard1.6
以及一个非常简单的.NET Framework控制台应用程序,该应用程序引用上述.NET标准库,描述为以下项目文件:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard1.6</TargetFramework>
  </PropertyGroup>

</Project>
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net45</TargetFramework>
  </PropertyGroup>

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

</Project>

Exe
网络45
构建控制台应用程序时,会出现以下构建错误:

C:\Program Files\dotnet\sdk\1.0.4\NuGet.targets(97,5):错误:Project Common与net45(.NETFramework,版本=v4.5)不兼容。项目通用支持:netstandard1.6(.NETStandard,Version=v1.6)

我看到并尝试了那里提供的一些建议,但没有一个奏效。因此,这似乎是一个不同的问题。请注意,这发生在我的解决方案的构建过程中,而不是以任何方式引用(显式)NuGet包

最后,如果有帮助,我有一个解决方案可以在这里演示这个问题:
要使.net framework项目与.net标准库兼容,您必须从nuget获得
NETStandard.Library

现在我找不到任何官方资源确切说明为什么必须这样做,但据我所知,
NETStandard.Library
有必要的链接,可以从.NET标准API映射到.NET Framework。

如果您想了解更多信息,我建议您阅读的官方文档。

.NET Framework 4.5仅支持使用针对.NET标准1.0或1.1的.NET标准库。因为您的库的目标是1.6,所以该工具在这里做了正确的事情,并排除了错误(因为您的库可能会使用.NET Framework 4.5中不可用的API)。如果将库发布为NuGet package并通过包引用使用它,包还原也会出错(错误是包不兼容)


对于.NET Framework版本支持哪个.NET标准版本存在一些混淆,特别是因为有可用的预览工具(“2.0”)可以更改这些版本。因此,包含两行关于受支持版本的内容。但是,在您的情况下,这两个版本都将.NET Framework 4.5限制为.NET Standard 1.1。

您应该以.NET 4.6.1或更高版本为目标。我尝试了您的示例项目,但项目引用似乎还不能与VS 2017.2和.NET Standard references一起使用。将库添加为普通文件引用,并将NETStandard.library Nuget包添加到控制台应用程序中,然后它就会工作。是这样还是那样?这显然是一个显而易见的主要场景,应该有工作代码来演示这一点。至少可以说,什么也找不到,这是非常令人惊讶的。添加直接文件引用可能适用于一种配置(调试),但其他配置(版本等)如何?这就是使用项目引用的好处。如果您能找到一个GitHub问题,它声明这是由于一个已知的问题,并将其作为一个答案呈现,我将标记它。我所看到的一切都表明,这应该像所描述的那样“正常工作”。您可以将$(配置)添加到参考路径中,以获得一个配置无关的csproj文件,例如Debug/Release builds。但是VS通常会扭曲它,因为它不能正确识别这个,尽管它可以工作。我同意.NET核心工具仍然一团糟,但随着每个版本的发布,它都会变得更好。我很高兴看到,我不是唯一一个被这种新工具弄糊涂的人。:)即使在多次阅读兼容性矩阵之后,我仍然没有准确理解。请看@martin ullrich接受的答案。我已经阅读了文档,尤其是,4.5肯定声称得到支持。然而,没有提到如何使用工作代码和/或参考代码来实现这一点。尽管这并不能回答问题,但我认为这一点非常有趣,也很难找到相关信息。“要使.net framework项目与.net标准库兼容,必须从nuget获取NETStandard.Library。”确定!马丁,在这里,困惑的确是当今的流行语。感谢您的见解和解释。我的理解是,图表代表了允许的最大框架,而实际上它是允许的确切框架。我将公共项目设置为
netstandard1.4
,将dotNet.Framework设置为
net461
,两个项目现在都按预期编译。再次感谢!啊。。。由于我无法再编辑上述评论,我想确定并澄清,
net461
始终是我的预期目标,但我上面的问题使用了
net45
,因为这是一个较低的框架,并认为这将简化事情。但正如我们清楚地发现的那样,这里没有什么是简单的是的,我看过你的GitHub回购协议,它也是
net45
,但我没有尝试构建它。如果你也遇到了其他问题,那么最好是提出新的问题。我知道这是一篇老文章,所以事情可能已经改变了。但我创建了一个.NET标准dll(2.0),并能够使用.NET framework 4.5控制台应用程序运行它。我只需要在控制台应用程序中引用netstandard.dll(以及我的自定义.NET标准dll)。如果使用dll文件,在使用不可用的API之前,任何事情都是可能的。。