更新:这是指围绕project.json构建的一组过时的.net核心工具,此问题及其答案在当前的.net核心工具集中(如Visual Studio 2017+)的实用程序非常有限。
使用Visual Studio 2015更新3,我试图找出当前存在的限制,这些限制会阻止我执行以下操作:
solutiondir\
将包含一个src\
目录,该目录包含一个projectdir\
(Solutiondir\src\projectdir
)。 Projectdir
将包含一个HelloWorldPCL类库,该类库是作为classic .net PCL
项目构建的,并且还包含其他框架目标。 Projectdir
中为.net 4.6
项目编译相同的HelloWorldPCL。 Projectdir
中为.net core
编译相同的HelloWorldPCL。 #if DOTNET
和#if NET46
和#if PCL
条件定义,以处理在各种框架/环境中不可用的事情。 到目前为止,我可以完成上面的大部分操作,但是当我尝试让
Projectdir
包含.net core
工件(例如project.json
或HelloWorldCore.xproj
)时,如果我尝试在同一文件夹中创建单独的.csproj
和.xproj
项目,则IDE会给我很多错误。似乎不是正确的方法。对于一个工作正常的
.csproj
项目,当我在磁盘上引入.xproj
和project.json
时,但我们还没有将它们添加到解决方案本身中,它们只是坐在Real Project Sources旁边的磁盘上,我得到了Nuget包还原错误,这是只能通过删除project.json
文件使它消失,因此很明显,不可能在项目目录中有.csproj
,也没有project.json
文件夹。必须在project.json
模式(.net core
项目样式)和.csproj
模式(经典C#项目样式)之间进行选择。我建立了一个“ splinter 的”代码库,演示了不可能使用同时包含
.csproj
和project.json
的文件夹,然后尝试构建csproj
和project.json
项目而又不会干扰它们的可能性:https://bitbucket.org/wpostma/helloworldcoreandpcl
问题:是否有任何方法可以从一组C#源文件中构建项目,并以完整的
.net 4.6
程序集, native .net core
类库以及可能针对任何特定目标的PCL程序集为目标。 .net个人资料?异议:您可能会问:“您难道不应该只使用一个PCL并完成了它,而忘记将完整的.net定位为目标还是创建一个单独的
.net core
类库dll吗?”。也许如果代码可以从一个来源一次构建一次,而没有任何条件定义,并且在功能上没有任何差异,并且如果最低公分母PCL“netstandard”配置文件方法所施加的限制已足够,则可以。但是,在不可能的情况下呢?为了实现单个
.cs
源文件针对多个.net配置文件nerdvana的目标,我们是否必须进行复杂的构建过程,在其中复制项目文件或移动源代码?还是我忽略了替代解决方案?更新:Visual Studio IDE似乎存在问题,当您使用
project.json
而不是.csproj
生成解决方案时,它会阻止您直接在解决方案中添加对类库的引用。但是,由Jon指定的以下解决方案表明您应该构建项目,然后使用dotnet pack
构建nuget包。如果您在此处查看经过修改的演示,则pack.cmd文件可以包含我打包nuget包时使用的步骤,然后将其本地“发布”到文件(本地目录)nuget供我个人使用。 最佳答案
我会尝试使用纯project.json
方法。例如,这是一个project.json
文件,它将构建一个支持netstandard1.0
,PCL配置文件328和.NET 4.6的单个程序包-每个配置都定义了自己的符号,因此您可以使用条件代码。
{
"version": "1.0.0",
"frameworks": {
"net46": {
"buildOptions": {
"define": [ "NET46" ]
}
},
"netstandard1.0": {
"buildOptions": {
"define": [ "CORE" ]
},
"dependencies": {
"NETStandard.Library": "1.6.0"
}
},
".NETPortable,Version=v4.0,Profile=Profile328": {
"buildOptions": {
"define": [ "PCL" ]
},
"frameworkAssemblies": {
"mscorlib": "",
"System": "",
}
}
}
}
然后只需使用
dotnet pack
创建nuget包。 (在添加所有其他元数据等之后)关于c# - 创建具有相同C#源构建的完整.net,PCL和dotnet核心程序集的单个源项目?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38206209/