War*_* P 5 .net c# visual-studio-2015 asp.net-core .net-standard-1.5
更新:这是指围绕project.json构建的一套过时的.net核心工具,这个问题及其答案在当前.net核心工具集(如Visual Studio 2017+)中的实用性非常有限.
使用Visual Studio 2015,更新3,我试图找出阻止我执行以下操作的当前限制:
对于单个C#代码库,从相同的源代码编译完整的.net框架版本和PCL版本以及.net核心类库.
解决方案目录solutiondir\将包含一个src\包含projectdir\(Solutiondir\src\projectdir)的目录.
Projectdir将包含一个HelloWorldPCL类库,它作为一个classic .net PCL项目构建,并与其他框架目标一起构建.
从同Projectdir一个相同的HelloWorldPCL也将被编译为 .net 4.6项目.
从同Projectdir一个相同的HelloWorldPCL也将被编译.net core.
所有上述输出组件的共享访问的单组C#代码可以具有一些#if DOTNET与#if NET46和#if PCL有条件的定义来处理东西并不是在各种框架/环境可用.
到目前为止,我所能做的最上面的,但是当我尝试有Projectdir包含.net core伪像project.json或者HelloWorldCore.xproj,在IDE给了我很多的错误,如果我试图创建独立.csproj和.xproj项目在同一个文件夹,以便不似乎是正确的要走的路.
有了一个工作.csproj项目,当我介绍一个.xproj和一个project.json磁盘,但我们没有将这些添加到解决方案本身,他们只是坐在真实项目源旁边的磁盘上,我得到一个Nuget包恢复错误,这只能是通过删除project.json文件来消失,所以显然不可能.csproj在项目目录中有一个project.json文件夹.必须在project.json模式(.net core项目风格)和.csproj模式(经典C#项目风格)之间进行选择.
我已经构建了一个"破损"的代码库,它表明不可能使用包含a .csproj和a 的文件夹project.json,然后尝试构建csproj和project.json项目而不会干扰它们:
https://bitbucket.org/wpostma/helloworldcoreandpcl
问题:是否有任何方法可以从一组C#源文件构建项目,并将目标,完整.net 4.6程序集,本机.net core类库以及可能针对任何特定.net配置文件的PCL程序集作为目标?
异议:你可以正确地问:"你不应该只使用一个PCL并完成它,忘记定位完整.net或创建一个单独的.net core类库dll?".也许如果代码可以从单个源构建一次,没有任何条件定义,并且没有任何功能差异,并且如果最低公分母PCL" netstandard "配置文件方法所施加的限制足够,那么你可以.但是那些甚至不可能的案例呢?
我们是否必须有一些复杂的构建过程,我们要么复制项目文件或移动源代码,以实现单个.cs源文件目标多个.net profile nerdvana?还是我忽略了其他解决方案?
更新:当您使用a project.json而不是使用a来构建它时,Visual Studio IDE出现问题,导致您无法直接在解决方案中添加对类库的引用.csproj.但是Jon指定的下面的解决方案表明你应该构建你的项目,然后用它构建一个nuget包dotnet pack.如果你在这里查看我修改过的demo,你可以将pack.cmd文件包含我用来打包nuget包的步骤,然后在本地"发布"到一个文件(本地目录)nuget feed供我个人使用.
我会尝试采用纯粹的project.json方法.例如,这是一个project.json文件,它将构建一个支持netstandard1.0PCL配置文件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": "",
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后只需dotnet pack用来创建nuget包.(在添加所有其他元数据等之后)
| 归档时间: |
|
| 查看次数: |
1155 次 |
| 最近记录: |