Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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# 在.net 4.6.2中使用.net标准1.5库会丢失System.Runtime 4.1.0.0_C#_.net_Visual Studio 2017_.net Standard_.net Standard 1.5 - Fatal编程技术网

C# 在.net 4.6.2中使用.net标准1.5库会丢失System.Runtime 4.1.0.0

C# 在.net 4.6.2中使用.net标准1.5库会丢失System.Runtime 4.1.0.0,c#,.net,visual-studio-2017,.net-standard,.net-standard-1.5,C#,.net,Visual Studio 2017,.net Standard,.net Standard 1.5,在.net framework 4.6.2 consoleapps中使用.net标准时遇到一些问题 我可以将问题归结为: 鉴于: 我用这个类创建了一个.net标准1.5客户端库vis vs 2017 public class Class1 { public List<int> Get() { return new List<int>() { 1, 2, 3, 4, 5, 65, 6 }; }

在.net framework 4.6.2 consoleapps中使用.net标准时遇到一些问题

我可以将问题归结为: 鉴于:

我用这个类创建了一个.net标准1.5客户端库vis vs 2017

public class Class1
    {
        public List<int> Get()
        {
            return new List<int>() { 1, 2, 3, 4, 5, 65, 6 };
        }
    }
现在我明白了

System.IO.FileNotFoundException:'文件或程序集 “System.Runtime,版本=4.1.0.0,区域性=中性, 未找到PublicKeyToken=b03f5f7f11d50a3a

当我将.net standardlib nuget包添加到.net fx控制台时,它可以工作。但是,system.runtime可以通过GAC和nuget引用访问,这对我来说似乎很难看

我在这里推出了这个简短的测试解决方案:

我遗漏了什么?

我添加了一个示例,向您展示如何做到这一点。从README.md:

要求 一般来说,在应用程序中使用针对.NET标准的库 以.NET Framework为目标需要应用程序项目包含NuGet .NET标准(
NETStandard.Library
)的参考。这确保了 应用程序中包含一组程序集

在Visual Studio 2015中,使用.NET中的NuGet软件包的默认方式 框架项目是通过
packages.config
进行的。我不推荐使用此路径 这意味着所有程序集都直接注入到应用程序中 项目,这将大大增加您的项目文件。相反,我建议 您可以使用
project.json
。为此,请执行以下步骤:

  • 卸载所有软件包(如果您仍在使用
    packages.config
  • 删除空的
    packages.config
  • 添加包含以下内容的
    project.json
    文件:

    json
    {
    “依赖项”:{
    “NETStandard.Library”:“1.6.0”
    },
    “运行时”:{
    “赢”:{}
    },
    “框架”:{
    “net462”:{}
    }
    }
    

  • 请注意,您通常可以使用最新版本的
    NETStandard.Library
    package,但您需要确保保留框架 与应用程序目标的.NET Framework版本同步的名字对象,即。 当您以.NET Framework 4.6.1为目标时,需要确保使用
    net461

    这感觉很笨拙 是的。我们计划通过两种方式解决这一问题:

    • 我们正在用Visual Studio中基于MSBuild的解决方案替换
      project.json
      Studio 2017。您仍然需要添加对
      NETStandard.Library
      的引用,但是 您不再需要弄乱包的表示方式,也不再需要 必须手动保持目标信息同步

    • 我们正计划更新.NET Framework,以便将来的版本能与之配套 对.NET标准的内置支持,在这种情况下,引用将不再 这是需要的


    我发现添加
    NETStandard.Library
    对我来说不起作用,但确保在构建时生成绑定重定向确实起到了作用

    <PropertyGroup>
        <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    </PropertyGroup>
    
    
    

    非常感谢您的澄清。我应该如何在VS2017 RC中添加包?那里我不再有package.json,我也不确定是否有一个相同的替换依赖项部分?在VS2017中,我们用一个新的MSBuild项目组
    替换了
    项目.json
    。这比
    项目更容易ect.json
    。对于.NET Framework应用程序,我们将允许您使用
    package.config
    或MSBuild方式,并且我们的计划是在首次使用时提示您。但是,我认为在VS2017的当前RC中还没有这一功能。我会询问。
    <PropertyGroup>
        <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    </PropertyGroup>
    
    <PropertyGroup>
        <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
        <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
    </PropertyGroup>