.NET Core项目修改project.json来引用其他目录下的源码等文件的办法 & 解决多框架时 project.json 与 app.config冲突的问题
作者: zyl910
一、缘由
项目规模大了后,经常会出现源码文件分布在不同目录的情况,但.NET Core项目默认只有项目目录下的源码文件,且不支持“Add As Link”方式引入文件。这时需要手工修改project.json文件了。
可能是因为最新版本已将 project.json 转为 .csproj,导致我花了一些功夫才找到配置办法,故写了这篇笔记。
二、引用其他目录下的源码等文件的办法
2.1 官网说明
官网的 project.json 和 csproj 属性之间的映射 里简单介绍了如何增加其他的引用文件。
文件在 project.json 中,可将生成和打包操作扩展为从不同的文件夹进行编译和嵌入。 在 MSBuild 中,使用项实现此操作。 以下示例是一个常见转换:
JSON:
{
  "buildOptions": {
    "compile": {
      "copyToOutput": "notes.txt",
      "include": "../Shared/*.cs",
      "exclude": "../Shared/Not/*.cs"
    },
    "embed": {
      "include": "../Shared/*.resx"
    }
  },
  "packOptions": {
    "include": "Views/",
    "mappings": {
      "some/path/in/project.txt": "in/package.txt"
    }
  },
  "publishOptions": {
    "include": [
      "files/",
      "publishnotes.txt"
    ]
  }
}
XML:
<ItemGroup>
  <Compile Include="..\Shared\*.cs" Exclude="..\Shared\Not\*.cs" />
  <EmbeddedResource Include="..\Shared\*.resx" />
  <Content Include="Views\**\*" PackagePath="%(Identity)" />
  <None Include="some/path/in/project.txt" Pack="true" PackagePath="in/package.txt" />
  <None Include="notes.txt" CopyToOutputDirectory="Always" />
  <!-- CopyToOutputDirectory = { Always, PreserveNewest, Never } -->
  <Content Include="files\**\*" CopyToPublishDirectory="PreserveNewest" />
  <None Include="publishnotes.txt" CopyToPublishDirectory="Always" />
  <!-- CopyToPublishDirectory = { Always, PreserveNewest, Never } -->
</ItemGroup>
所有 MSBuild ItemGroup 元素都支持Include、Exclude 和 Remove。
可使用 PackagePath="path" 修改 .nupkg 内的包布局。
除 Content 外,大多数项组需要显式添加要包括在包中的 Pack="true"。 Content 将被置于包中的 content 文件夹,因为 <IncludeContentInPack> 属性默认设置为 true。 有关详细信息,请参阅在包中包含内容。
PackagePath="%(Identity)" 是一种将包路径设置为项目相对文件路径的快捷方法。
2.2 详细用法
官网的办法是对的,但貌似只能引用一个文件(或目录)。怎样才能引用多个文件(或目录)呢?
在网上搜索了一下,发现其实 include 等参数是可以作为数组的,另外还有includeFiles等参数。格式为——
{
    "buildOptions": Object {
        "compile": Object {
            "include": String or String[],
            "exclude": String or String[],
            "includeFiles": String or String[],
            "excludeFiles": String or String[],
            "builtIns": Object,
            "mappings": Object
        },
        "embed": Object {
            "include": String or String[],
            "exclude": String or String[],
            "includeFiles": String or String[],
            "excludeFiles": String or String[],
            "builtIns": Object,
            "mappings": Object
        },
        "copyToOutput": Object {
            "include": String or String[],
            "exclude": String or String[],
            "includeFiles": String or String[],
            "excludeFiles": String or String[],
            "builtIns": Object,
            "mappings": Object
        }
    }
}
三、高级用法
开发类库项目时,经常需要为不同目标框架建立项目文件。因源代码文件是同一份,所以这些项目文件是放在同一个目录中。这时VS2015会遇到 project.json 与 app.config冲突的问题,即.NET Framework项目本来是以app.config里的框架版本号为准的,但因目录中有 project.json 文件,于是报告框架版本不一致错误。
这时便可以利用本机制,将 .NET Core 的项目文件(.xproj、.json)移至一个子目录中,再去引用上级目录的源码文件。即 project.json 的编译文件配成——
{
    "buildOptions": {
        "compile": {
            "include": [
                "../**/*.cs"
            ]
    },
}
其中的 **/ 表示包含子目录。
实测通过。源码参考:https://github.com/zyl910/ZylLib.UnionTypes/tree/master/examples/ConsoleExample/netcore10
参考文献
- Microsoft《project.json 和 csproj 属性之间的映射》. https://docs.microsoft.com/zh-cn/dotnet/core/tools/project-json-to-csproj
 - Wolf《[asp.net core]project.json(1)》. http://www.cnblogs.com/wolf-sun/p/5987252.html
 - 【内容已过时】aspnet《Project.json file》. https://github.com/aspnet/Home/wiki/Project.json-file
 
出处:https://www.cnblogs.com/zyl910/p/project_json_include.html
.NET Core项目修改project.json来引用其他目录下的源码等文件的办法 & 解决多框架时 project.json 与 app.config冲突的问题的更多相关文章
- [C#] .NET Core项目修改project.json来引用其他目录下的源码等文件的办法 & 解决多框架时 project.json 与 app.config冲突的问题
		
作者: zyl910 一.缘由 项目规模大了后,经常会出现源码文件分布在不同目录的情况,但.NET Core项目默认只有项目目录下的源码文件,且不支持"Add As Link"方式 ...
 - django引用static目录下的css,js文件304问题
		
前提:django1.8 在html页面可以请求道css,js文件并在chrome的开发者工具中查看css,js文件返回状态为200 原因: html页面在头部添加了<!DOCTYPE html ...
 - Roslyn 入门:使用 .NET Core 版本的 Roslyn 编译并执行跨平台的静态的源码
		
Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性.以至于我们只需要编写很少量的代码便能够编译并执行我们的代码. 作为 Roslyn 入门篇文章之一,你将可以通过本文学习如何开始编写一 ...
 - 解决使用intellij idea开发MAVEN项目在target目录下不存在mapper.xml文件
		
原 解决使用intellij idea开发MAVEN项目在target目录下不存在mapper.xml文件 原文章链接:https://blog.csdn.net/beauxie/article/de ...
 - Java基础知识强化之IO流笔记49:IO流练习之 复制指定目录下指定后缀名的文件并修改名称的案例
		
1. 复制指定目录下指定后缀名的文件并修改名称的案例 需求:复制指定目录下的指定文件,并修改后缀名. • 指定的文件是:.java文件. • 指定的后缀名是:.jad • 指 ...
 - 使用VSCode创建.NET Core 项目,添加类库间引用
		
注:网络上搜索到的关于VsCode创建调试.Net Core 项目的文章都比较老旧,不能完全参考使用,根据网络文章.微软官方文档的指导下,学习并整理此文档,但也大体和文档学习路线相似,主要为记录学习过 ...
 - [C#] VS2017中在某些目录下使用不了 .NET Core 2.0 问题的处理办法
		
作者: zyl910 一.缘由 最近遇到了一个奇怪的问题--明明已经在VS2017里装好了 .NET Core 2.0 SDK,且测试过新建一个 .NET Core 2.0控制台项目能成功使用.但是在 ...
 - eclipse新建web项目,运行后在tomcat安装目录下webapps中没有该项目
		
一.发现问题在eclipse中新建Dynamic Web Project,配置好本地的tomcat并写好代码后选择Run on Server,但运行后发现在tomcat的安装目录下的webapps并没 ...
 - 开源电影项目源码案例重磅分析,一套代码发布小程序、APP平台多个平台
		
uni-app-Video GitHub地址:https://github.com/Tzlibai/uni-app-video 一个优秀的uni-app案例,旨在帮助大家更快的上手uni-app,共同 ...
 
随机推荐
- 如何利用Docker构建基于DevOps的全自动CI
			
来自用户的DevOps实践分享,分享从开发代码到生产环境部署的一条龙操作的实践及经验, 包含工具技术的选型及考量.私有代码库与私有镜像库的应用等. (一)容器服务的Rancher选型 1.为什么说是下 ...
 - Java之static作用的深度总结
			
1.深度总结 引用一位网友的话,说的非常好,如果别人问你static的作用:如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的:如果是说 可以构成 静态代码块,那别人认为你还可以: 如果你说 ...
 - javascript中 for in  、for 、forEach 、for of 、Object.keys().
			
一 .for ..in 循环 使用for..in循环时,返回的是所有能够通过对象访问的.可枚举的属性,既包括存在于实例中的属性,也包括存在于原型中的实例.这里需要注意的是使用for-in返回的属性因各 ...
 - 基于DigitalOcean+LAMP+WordPress搭建个人网站
			
1. 注册DigitalOcean并新建主机 为了搭建个人网站首先需要一个可以在公网范围访问的主机,可以选用国内如阿里云.国外如DigitalOcean的各种云主机提供商,这里选用DigitalOce ...
 - 小白的C++之路——简易计算机
			
#include <iostream> using namespace std; int main() { char link; double num1, num2,num3; cout ...
 - js 数组传统方法
			
js 数组传统方法 push() 功能:向数组的末尾添加一个或多个元素 var arr = [4]; arr.push(1,2,3); // [4,1,2,3] 返回: 会返回新数组的长度length ...
 - football Alternative form of foteball
			
football. Alternative form of foteball foteball(Late Middle English) football (game played with a ba ...
 - 图像平移    cv.warpAffine()函数用法
			
# 图像平移image1='C:\\Users\\10107472\\Desktop\\myfile\\tensorflow-yolov\\read.jpg'img = cv.imread(image ...
 - 变量.argsort()的用法
			
a=[1,2,5,9,7,3]a=np.array(a)order = a.argsort() # 从小到大排序,并返回索引值print('order=',order)order1= a.argsor ...
 - python写文件无法换行的问题
			
python写文件无法换行的问题,用'\n' 不行,直接打印的出来了. 网上查了查,都说是用 ‘\r\n’ ,但是这样打出来,不仅换行了,还加了一个空行. windows平台最后结果是 直接 ...