博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[C#] .NET Core项目修改project.json来引用其他目录下的源码等文件的办法 & 解决多框架时 project.json 与 app.config冲突的问题...
阅读量:6712 次
发布时间:2019-06-25

本文共 2567 字,大约阅读时间需要 8 分钟。

作者:

一、缘由

项目规模大了后,经常会出现源码文件分布在不同目录的情况,但.NET Core项目默认只有项目目录下的源码文件,且不支持“Add As Link”方式引入文件。这时需要手工修改project.json文件了。

可能是因为最新版本已将 project.json 转为 .csproj,导致我花了一些功夫才找到配置办法,故写了这篇笔记。

二、引用其他目录下的源码等文件的办法

2.1 官网说明

官网的 里简单介绍了如何增加其他的引用文件。

文件在 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:
所有 MSBuild ItemGroup 元素都支持Include、Exclude 和 Remove。可使用 PackagePath="path" 修改 .nupkg 内的包布局。除 Content 外,大多数项组需要显式添加要包括在包中的 Pack="true"。 Content 将被置于包中的 content 文件夹,因为
属性默认设置为 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"            ]    },}

其中的 **/ 表示包含子目录。

实测通过。

参考文献

  • Microsoft《project.json 和 csproj 属性之间的映射》.
  • Wolf《[asp.net core]project.json(1)》.
  • 【内容已过时】aspnet《Project.json file》.

转载地址:http://nghlo.baihongyu.com/

你可能感兴趣的文章
setsockopt 设置socket 详细用法
查看>>
抽象工厂不同接口反射
查看>>
hdu1052
查看>>
服务器端推送技术
查看>>
python开发工具
查看>>
Home Assistant系列 -- 自动语音播报天气
查看>>
Hyberledger-Fabric 1.00 RPC学习(1)
查看>>
SDNU 1450.报时助手
查看>>
BZOJ 4144 Dijkstra+Kruskal+倍增LCA
查看>>
阻塞与非阻塞,同步与异步
查看>>
HTML段落自动换行的样式设置
查看>>
Android实现左右滑动指引效果
查看>>
html里frame导航框架实现方法
查看>>
shell编程系列5--数学运算
查看>>
在 UWP 应用中创建、使用、调试 App Service (应用服务)
查看>>
Active MQ C#实现
查看>>
C#实现秒表程序
查看>>
P4377 [USACO18OPEN]Talent Show
查看>>
多线程 售票 (同步)
查看>>
cJSON 使用笔记
查看>>