我想:
IQueryable<T>
,但没有第三方依赖(好吧,JetBrains.Annotations
)。在Visual Studio 2015.2中创建我的类库项目时,我找到了Class Library (.NET Core)
模板,其中说明了
用于将类库创建为可以定位任何平台的NuGet包的项目模板
任何平台!太棒了...但我无法让它发挥作用。经过大量的摆弄,我现在有以下project.json
(我现在可能完全破坏了它):
{
"title": "My Really Useful Class Library",
"copyright": "Copyright © 2015-16 Tigra Astronomy, all rights reserved",
"description": "Really neat stuff",
"language": "en-GB",
"version": "1.0.0-*",
"dependencies": {
"JetBrains.Annotations": "10.1.4",
},
"frameworks": {
"netstandard1.5": {
"imports": "dnxcore50",
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-24027",
"System.Linq.Expressions": "4.0.11-rc2-24027"
}
}
"net46": {
"frameworkAssemblies": {
"System.Collections": "4.0.*"
},
"dependencies": {}
}
},
"buildOptions": {
"xmlDoc": true
}
}
我接下来要做的就是在同一个解决方案中创建我的.NET Framework 4.6项目,并尝试引用类库。它允许我添加引用,但我得到构建错误,未解析的符号,R#不满意等。
我想我做得不对(毫不奇怪,真的,因为我在黑暗中摸索)。
我已经阅读了一些关于TFM,框架和库的文档,但这些文档都没有多大意义。
我真的需要在我的类库project.json
中添加什么,以便我可以从我的.net framework 4.6应用程序以及UWP和ASP.NET Core RC2应用程序中引用它?这真的是正确的方法,还是我开始走错了路?
答案 0 :(得分:33)
现在有两种方法可以创建C#项目:xproj
和csproj
。假设我们对它们使用project.json
,对于项目类型仍然有不同的作用 - 对于xproj
,project.json
包含构建项目所需的所有内容;对于csproj
,它只包含nuget依赖项。
也就是说,由于需要比xproj
/ project.json
支持的更复杂的构建管道,因此无法使用xproj构建某些项目类型(如UWP)。 (顺便说一下,这是回到msbuild的一个关键原因。)
还有两种创建基于.NET标准的类库的方法:您可以将xproj
与project.json
一起使用,或者您可以创建常规{{ 1}}&#34;便携式类库&#34;项目。使用VS 2015 Update 3 RC,您可以将PCL更改为针对.NET标准版本(csproj
而不是PCL配置文件,259等)。
如果您使用基于netstandard1.x
的类库来定位csproj
,那么在添加项目引用时,事情应该适合您。请注意,根据platform map,UWP目前最多支持netstandard1.x
。如果您想使用基于netstandard1.4
/ xproj
的项目,则面临挑战。今天使用project.json
的一个关键原因是在多个目标框架之间启用交叉编译。也就是说,从项目中创建多个输出。这与创建可从任何兼容项目引用的单个输出不同。两者都有其用途,这取决于您的需求。
如果您决定创建一个基于xproj
的类库,那么可以使用一种解决方法来从UWP项目或任何其他兼容的项目类型中引用它,如果&#34;添加引用&# 34;对话框不起作用(它不像xproj
- &gt; csproj
几乎被打破了。不要使用对话框,而是编辑您的UWP xproj
以指向csproj
的输出,如下所示:
xproj
以上代码段取自Rx.NET UWP Test Runner here
如果你这样做,你还需要从你的UWP项目中添加构建依赖项到你的xproj,因为MSBuild / Visual Studio不知道它并以错误的顺序构建东西。为此,在解决方案资源管理器中右键单击您的UWP项目,然后选择&#34; Build Dependencies - &gt;项目依赖&#34;。在该对话框中,选中xproj的复选框,以确保VS / MSbuild首先知道构建该工具。
您可以在此处查看完整的Rx.NET解决方案,其中包括<Reference Include="System.Reactive.Interfaces">
<HintPath>..\System.Reactive.Interfaces\bin\$(Configuration)\netstandard1.0\System.Reactive.Interfaces.dll</HintPath>
</Reference>
个引用和UWP - &gt;我在上面提到的xproj->xproj
个引用。
答案 1 :(得分:3)
新项目模板/ .xproj的工作方式略有不同。新的类库(和应用程序模板)生成nuget包,而不是普通的程序集。
在该nuget包中,所有目标都包含在其中。话虽如此,您添加新项目的方式与添加任何其他nuget包的方式相同:您将nuget放入nuget feed,在Visual Studio中引用它,然后从那里获取它。
如果您没有运行nuget服务器(Visual Studio Team Services + NuGet包,myget,自托管),您还可以将包放入文件夹(本地或网络共享)并将此文件夹添加为nuget资源。
如果“太”工作,您还可以在一个文件夹中创建两个项目:A * .csproj和* .xproj。 * .csproj以.NET 4.6 Framework为目标,* .xproj保持如上所述并具有多个目标。通过此设置,您可以通过简单地添加引用,通常以之前使用的方式引用项目(如果它们位于相同的解决方案中)。