也许我对“.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"
}
}
答案 0 :(得分:22)
现在可以使用.Net Core 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,可以通过任何与此版本相同或更高的框架引用:示例:
project.json
将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"
]
}
},
如果要在每次构建时更新它,可以将以下内容添加到project.json文件中,该文件会自动将软件包更新到父目录中。:
dotnet pack -o e:\packages
将Nuget包添加到.net 4.6应用程序中。这可以通过几种方式完成。一种简单的方法是将保存包的位置添加为包装源参考。
每次构建时增加"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;
现在将为您构建类库的两个版本。
在.NET 4.6项目(App)中,然后添加对调试文件夹中找到的类库的DLL的直接引用
您现在可以导入此命名空间,并针对它进行构建。尽管ReSharper(2016.3 EAP 2)似乎感到困惑,并将这些行标记为红色 - 但在.NET发布之后才会出现停顿。
如果打开应用程序项目文件(.csproj),您将看到框架添加的引用。
注意:构建代码dnx462似乎不起作用,抱怨.NET框架没有安装,即使该项目有4.6.2 WPF应用程序。
答案 3 :(得分:3)
如果您不介意对Debug或Release的引用进行硬编码,我发现了一个非常简单的解决方案。您只需在csproj文件中手动添加对xproj的引用。这是你如何做到的:
在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>
复制并修改它以引用xproj项目生成的DLL,如下所示:
<Reference Include="HighFive.Server.Web">
<HintPath>..\HighFive.Server.Web\bin\Debug\net461\HighFive.Server.Web.dll</HintPath>
<Private>True</Private>
</Reference>
关于硬编码调试或发布引用:对于单元测试项目,这不是问题,因为您通常在调试模式下执行单元测试。我相信使用MSBuild参数可以更聪明地避免硬编码,但我还不需要这样做。
答案 4 :(得分:1)
我一直在努力解决这个问题,但是找到了比繁琐的nuget包解决方案更好的解决方案。我在Stackify上找到了这个。这篇文章只讨论了一个单独的解决方案,但只使用一个解决方案很容易。
此选项需要使用.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.csproj
和MyProjectName.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/