在.NET 4.6项目中引用.NET Core Library

时间:2015-11-19 17:27:01

标签: c# .net

也许我对“.NET核心库”的含义缺乏了解,但是当我尝试使用Visual Studio 2015在.NET 4.6程序集中添加.NET核心库时,我收到错误:

  

无法添加对“...”的引用。

我明白了什么不对吗?

这是我在.NET Core程序集的project.json中配置的

"frameworks": {
   "net451": { },
   "dotnet5.4": {
     "dependencies": {
     "Microsoft.CSharp": "4.0.1-beta-23516",
     "System.Collections": "4.0.11-beta-23516",
     "System.Linq": "4.0.1-beta-23516",
     "System.Runtime": "4.0.21-beta-23516",
     "System.Threading": "4.0.11-beta-23516"
  }
}

5 个答案:

答案 0 :(得分:22)

现在可以使用.Net Core RC2完成。方法如下:

  1. 确保您的.Net RC2项目$lesson_id = $request->get('lesson_id') $lastOrder = Content::whereHas('lesson', function ($query) use ($lesson_id) { $query->where('lesson_id', $lesson_id); })->max('order'); if (is_null($lastOrder)) { $lastOrder = 0; } $newContent = Content::create( [ 'lesson_id' => $lesson_id, 'order' => $lastOrder + 1 ] ); 配置为包含相关的.net框架。例如,本节引用.Net 4.51,可以通过任何与此版本相同或更高的框架引用:
  2. 示例:

    project.json
    1. 将RC2应用程序打包为Nuget包。我还没有看到如何从Visual Studio中执行此操作,但可以通过以下命令行完成:

      "frameworks": { "net451": { }, "netstandard1.5": { "dependencies": { "NETStandard.Library": "1.5.0-rc2-24027" }, "imports": [ "portable-net45+wp80+win8+wpa81+dnxcore50", "portable-net451+win8" ] } },

    2. 如果要在每次构建时更新它,可以将以下内容添加到project.json文件中,该文件会自动将软件包更新到父目录中。:

      dotnet pack -o e:\packages
      1. 将Nuget包添加到.net 4.6应用程序中。这可以通过几种方式完成。一种简单的方法是将保存包的位置添加为包装源参考。

      2. 每次构建时增加"scripts": { "postcompile": [ "dotnet pack --no-build --configuration Debug -o ..//..//..//packages" ]} 文件中的版本号,以确保其他应用程序看到更新。

答案 1 :(得分:9)

答案显示在演示文稿中

仅使用尚未发布的ASP.NET Core RC 2,将添加对csproj中引用xproj的支持。

答案 2 :(得分:6)

更改您的类库(和任何依赖项)以构建4.6以及.NET Core;

Change class library to build

现在将为您构建类库的两个版本。

Debug folder with both builds

在.NET 4.6项目(App)中,然后添加对调试文件夹中找到的类库的DLL的直接引用

Add direct reference

您现在可以导入此命名空间,并针对它进行构建。尽管ReSharper(2016.3 EAP 2)似乎感到困惑,并将这些行标记为红色 - 但在.NET发布之后才会出现停顿。

如果打开应用程序项目文件(.csproj),您将看到框架添加的引用。

enter image description here

注意:构建代码dnx462似乎不起作用,抱怨.NET框架没有安装,即使该项目有4.6.2 WPF应用程序。

答案 3 :(得分:3)

如果您不介意对Debug或Release的引用进行硬编码,我发现了一个非常简单的解决方案。您只需在csproj文件中手动添加对xproj的引用。这是你如何做到的:

  1. 确保您的csproj至少使用一个nuget包。大多数项目都有,所以这不是问题。
  2. 在Visual Studio中,卸载csproj项目
  3. 在Visual Studio中,右键单击csproj文件并选择“编辑”
  4. 在csproj项目文件中找到您引用nuget包的部分。啊......这是一个:

        <Reference Include="Microsoft.CodeAnalysis, Version=1.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> 
           <HintPath>..\packages\Microsoft.CodeAnalysis.Common.1.3.0\lib\net45\Microsoft.CodeAnalysis.dll</HintPath>
           <Private>True</Private>
        </Reference>
    
  5. 复制并修改它以引用xproj项目生成的DLL,如下所示:

     <Reference Include="HighFive.Server.Web"> 
         <HintPath>..\HighFive.Server.Web\bin\Debug\net461\HighFive.Server.Web.dll</HintPath>
         <Private>True</Private>
     </Reference>
    
  6. 保存并关闭csproj文件
  7. 重新加载项目
  8. 重建所有
  9. 的Presto!
  10. 关于硬编码调试或发布引用:对于单元测试项目,这不是问题,因为您通常在调试模式下执行单元测试。我相信使用MSBuild参数可以更聪明地避免硬编码,但我还不需要这样做。

答案 4 :(得分:1)

我一直在努力解决这个问题,但是找到了比繁琐的nuget包解决方案更好的解决方案。我在Stackify上找到了这个。这篇文章只讨论了一个单独的解决方案,但只使用一个解决方案很容易。

.NET项目的单独解决方案

此选项需要使用.NET核心和.NET 4.x.x为每个项目提供两个解决方案文件和两个项目文件。首先创建一个新的空白解决方案接下来创建一个新的Windows“类库”(你的名字在这一点上并不重要)。从解决方案中删除它,以便您可以编辑.csproj文件。打开.csproj文件并将AssemblyName XML元素更改为.NET核心项目程序集名称。您现在应该对项目进行任何其他名称相关的更改。关闭.csproj并将其重命名为.xproj文件。将其复制到与.xproj文件相同的文件夹中。

现在你的新闪亮的.csproj文件准备好了,这就是魔术发生的地方。创建一个名为ProjectName.project.json的文件并将其添加到其中(根据需要修改.net框架)

{ "runtimes": { "win": {} }, "frameworks": { "net461": {} }}

在.NET 4.x.x解决方案中,重新加载此修改后的.csproj,您可以添加源文件。我发现最简单的方法是按“显示所有文件”,然后在每个文件/文件夹的右键单击上下文菜单中单击“包括在项目中”。现在尝试构建.csproj,它应该构建良好。如果构建不正确,请尝试重新加载项目,或重新启动visual studio。

相同的解决方案,但两个项目

这与前一个相同,但有一些关键差异。 .csproj文件的名称必须与.xproj的名称不同(我刚刚添加了一个后缀,如MyProjectName.win.csprojMyProjectName.win.project.json)。这些可以添加到同一解决方案中,而不会发生名称冲突。您甚至可以让.csproj中的AssemblyName元素与.NET核心程序集名称相同,因为输出文件夹会根据.NET版本而更改

最后的想法

我发现这个解决方案比nu-get包选项好得多。要考虑的唯一小问题是必须对任何引用,nu-get包或任何新文件的所有修改都添加到两个项目中;不过,这是一个很小的代价,以避免可怕的nu-get包选项。让我们交叉一下,希望VS团队能够尽快获得.cspoj文件中的.xproj引用。

我知道我不应该发布链接,但是我想在应有的地方给予肯定。 http://stackify.com/using-both-xproj-and-csproj-with-net-core/