从.NET Core应用程序引用.NET 4.6.2类库

时间:2016-08-08 18:42:08

标签: c# visual-studio-2015 .net-core project.json

我正在使用VS Update 3(14.0.25425.01)。这就是我所做的:

  1. 创建ASP.Net核心Web应用程序(.Net Core)
  2. 创建类库.Net 4.6.2
  3. net462添加到框架,netcoreapp1.0,在project.json中导入
  4. 右键单击ASP.Net Core应用程序,单击添加引用,选择项目,选择您在步骤2中创建的类库。
  5. 我在恢复时没有错误,并且引用被添加到ASP.Net Core应用程序中。但是,我无法访问它。我无法添加使用导入声明或访问对象。我经历了很多事情,但似乎没有任何工作,帖子的版本很碎片。

    enter image description here

    这是ASP.Net核心应用程序中的Program.cs。 enter image description here

    enter image description here

    更新 我做了Nate建议的。我以为我已经尝试过了..但是我现在可以访问我的4.6.2库了。但是,我现在收到编译错误。

    enter image description here

2 个答案:

答案 0 :(得分:4)

这在Visual Studio 2015 Update 3中有效,但您的project.json并不合适。

不应将net462添加到imports部分,而应将其放在frameworks部分中:

"frameworks": {
  "net461": { },
  "netcoreapp1.0": {
    "dependencies": {
      "Microsoft.NETCore.App": {
        "type": "platform",
        "version": "1.0.0"
      }
    }
  }
}

请注意,Microsoft.NETCore.App依赖项也需要移至netcoreapp1.0部分。这是因为只有在编译为.NET Core应用程序时才需要这种依赖关系。

您的.NET 4.6.2库的引用只是dependencies部分的一部分:

"dependencies": {
  (...)
  "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
  "MyLibrary": {
    "target": "project"
  }
}

通过这种方式构造它,我能够在我的.NET 4.6.2库中引用和使用类而没有任何问题。

供参考,这是我使用的整个工作project.json

{
  "dependencies": {
    "Microsoft.AspNetCore.Mvc": "1.0.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Configuration.CommandLine": "1.0.0",
    "Microsoft.Extensions.Logging": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
    "MyLibrary": {
      "target": "project"
    }
  },
  "frameworks": {
    "net461": { },
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0"
        }
      }
    }
  },
  "version": "1.0.0-*"
}

答案 1 :(得分:1)

@NateBarbettini回答完成了我原来的问题。但我无法使用我的.Net 4.6.1项目运行ASP.Net核心Web应用程序版本1,因为它无法为我的.Net 4.6.1项目找到.NetCore.App v1程序集。所以我使用以下project.json将project.json添加到我的.Net 4.6.1项目中。

{
  "version": "1.0.0-*",

  "dependencies": {
  "NETStandard.Library": "1.6.0"
  },

  "frameworks": {
  "netstandard1.6": {
    "imports": "dnxcore50"
   },
  "net461": {}
 }
}

接下来,在ASP.Net Core Web Application中,通过在.NetCore.App下添加依赖项来修改project.json。这样它将获得两个版本,4.6.1和.NetCore v1。

...
"frameworks": {
"net461": {
  "dependencies": {
    "ClassLibrary1": {
      "target": "project"
    }
  }
},
"netcoreapp1.0": {
  "imports": [
    "dotnet5.6",
    "portable-net45+win8",
    "net461"
  ],
  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.0",
      "type": "platform"
    },
    "ClassLibrary1": {
      "target": "project"
    }
  }
}
}

到目前为止,我可以在.Net 4.6.1中进行开发,它可以在.NetCore.App v1下运行。但是,我认为在我的.Net 4.6.1项目中有其他依赖项时会出现问题。