首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

.NET魔法堂:工程构建基石->MSBuild

VS右键打开项目菜单, ? 对应MSBuildBuild目标, ? 对应MSBuildRebuild目标, ? 对应MSBuildClean目标, ?...执行引擎内置部分预定义Item,具体如下: image.png MSBuild执行引擎为每个Item预设元数据,具体如下: 元数据名 元数据说明 FullPath 当前项所指向文件绝对路径...RootDir 当前项所指向文件根目录 Filename 当前项所指向文件不含扩展名名称 Extension 当前项所指向文件扩展名 RelativeDir 当前项所指向文件相对路径(...以\为结尾) Directory 当前项所指向文件目录(以\为结尾) RecursiveDir 当Include包含**,则存放**匹配到目录路径 Identity %(RelativeDir...Import元素    作用:将另一个项目文件导入到当前项目文件    属性: 属性名 说明 Project 项目文件绝对或相对路径 1. 相对路径,是相对于当前项目文件路径而言; 2.

1.9K80

在项目文件 MSBuild NuGet 包编写扩展编译时候,正确使用 props 文件targets 文件

.NET 扩展编译用文件有 .props 文件和 .targets 文件。不给我选择还好,给了我选择之后我应该使用哪个文件来编写扩展编译代码呢?...如果你不了解 .props 文件或者 .targets 文件,可以阅读下面的博客: 理解 C# 项目 csproj 文件格式本质和编译流程 - walterlv 具体例子有下面这些博客。...工具包 - walterlv 如何创建一个基于命令行工具跨平台 NuGet 工具包 - walterlv 当我们创建 NuGet 包包含 .props 和 .targets 文件时候,我们相当于在项目文件...-- 当生成 WPF 临时项目时,不会自动 Import NuGet props 和 targets 文件,这使得在临时项目中你现在看到整个文件都不会参与编译。...WPF 临时项目不会 Import NuGet props 和 targets 可能是 WPF Bug,也可能是刻意如此。

20820
您找到你想要的搜索结果了吗?
是的
没有找到

MSBuild入门(续)

MSBuild基本概念(续) 在上一篇简单介绍了下MSBuild四个基本块,每块介绍比较单薄,在这里对在大多数项目模版生成*.*proj文件中比较常见一些用法和概念做些补充。...MSBuild 大都是用来引入文件,而文件会有一些附加信息,比如版本,语言等,而这些附加信息在项目文件是以子元素出现,称为元数据。...,用来执行某一逻辑处理,但是xml格式项目文件是没有这个处理能力,所以这些任务都是映射到.NET类库一些类,由这些类来处理操作逻辑。...Import元素像是一个占位元素,MSBuild在执行到此时会用*.targets替换掉此元素,就像本来就声明在这里一样,所以和*.targets文件有关所有保留属性会被重置。...Import元素对导入文件扩展名无要求,文件是正确项目文件就行,但一般约定为*.targets。 总结和备注 了解了以上知识点后,阅读一般项目模版生成项目文件(*.

91490

理解 C# 项目 csproj 文件格式本质和编译流程

ItemGroup ItemGroup 是用来指定集合地方,这与它名字非常契合。那么这集合里面放什么呢?答案是——什么都能放!...属性就是前面 PropertyGroup 那些属性和 ItemGroup 里说那些;而 Targets 是新东西,这才是真正用来定义编译流程关键,由于 Targets 是所有节点里面最复杂部分..." /> 而引入这份 .targets 文件便包含了 msbuild 定义各种核心编译任务。...它帮我们导入了公共属性、公共编译任务,还帮我们自动将项目文件夹下所有的 **\*.cs 文件都作为 ItemGroup 引入进来。...随后根据 PropertyGroup 里面设置属性正确显示属性面板状态,根据 ItemGroup 正确显示解决方案管理器引用列表、文件列表。

2.5K10

项目文件已知属性(知道了这些,就不会随便在 csproj 写死常量啦)

---- “项目文件已知属性系列”分为两个部分: 本文:项目文件已知属性(知道了这些,就不会随便在 csproj 写死常量啦) - 吕毅 项目文件已知 NuGet 属性(使用这些属性,创建...文件路径 路径 写在 csproj 文件 ItemGroup每一个元素即“”。...对以下这一进行说明的话: 那么,可用属性有:...): MSBuild 程序所在路径 $(MSBuildExtensionsPath): 自定义 targets 所在路径 $(MSBuildExtensionsPath32): 自定义 targets...程序所在路径 $(MSBuildBinPath): MSBuild 程序所在路径 如果希望了解在 csproj 创建 NuGet 包时可用属性,请参考我另一篇博客:项目文件已知 NuGet

1.5K10

如何创建一个基于命令行工具跨平台 NuGet 工具包

> None 表示这一要显示到 Visual Studio 解决方案(其实对于不认识文件,None 就是默认值);Include 表示相对于项目文件路径(支持通配符);Pack 表示这一要打包到...NuGet;PackagePath 表示这一打包到 NuGet 路径。...我们在 buildMultiTargeting 文件夹里 targets 文件写以下内容,这样我们注意力便可以集中在前面的 targets 文件中了。 <!...更多 MSBuild 全局参数,可以参考我另一篇文章项目文件已知属性(知道了这些,就不会随便在 csproj 写死常量啦) - 吕毅。...有两种不同方式: 直接传数据,这些数据可以被捕获成属性或者,具体可以阅读我另一篇博客: 如何使用 MSBuild Target(Exec)控制台输出 报告编译警告和编译错误,具体可以阅读我另一篇博客

97920

将 WPF、UWP 以及其他各种类型旧 csproj 迁移成基于 Microsoft.NET.Sdk 新 csproj

阅读 MSBuild.Sdk.Extras 来了解更多。 新 csproj 文件优势与直观体验 如果你已经体验过新 csproj 文件好处,那么直接前往下一节即可。没体验过的话就来体验一下吧!...从对比我们就能明显看出新 csproj 文件优势: 文件小,易读易写 在版本管理更容易解冲突 NuGet 包引用没有路径要求,这意味着开发者可以任意指定 NuGet 包位置 嵌套引用不需要重复指定...比如,你可能放入项目的不止有 cs 文件,还有其他各种用途资源——你需要重新选中他们然后在属性面板设置文件生成属性。..." SubType="Designer" Generator="MSBuild:Compile" /> 如果这只是一个简单 WPF/UWP 类库,那么这些节点其实就足够了。...其实这是只有新项目文件才会出现编译错误,而错误原因是 NuGet 缓存文件与包引用相关信息已经不正确了,需要运行 nuget restore 或者 dotnet restore 重新更新此文件才行

1.4K20

MSBuild简单介绍与使用

\src\Crust\Gimela.Crust.sln" /> <MSBuild Projects="@(ProjectToBuild)" Targets...这里还需要强调一点是,项目级元素(Property)可以在元素下定义,也可以在构造过程作为外部参数传入,这是一个非常有用特性,一般编译时选择配置(Debug或者Release)就是利用这个特性实现...Project元素 这是每一个项目文件最外层元素,它表示了一个项目的范围。如果缺少了这一元素,MSBuild会报错称Target元素无法识别或不被支持。...我们都知道,在一个项目的生成过程可能需要完成几项不同任务(比如编译、单元测试、check-in到源代码控制服务器中等),其中每一任务都可以用Target来表示。...可千万别和Property引用方法弄混了。 既然Type是资源类名,那么Include就是具体资源名称了,比如在上面的示例代码,Include引用就是C#源代码文件名称。

1.2K50

WPF 讲讲 Microsoft.NET.Sdk.WindowsDesktop 原理

请点击 github 打开,我特意用了一个commit链接,因为可能后续文件路径会修改 这个 SDK 包含了两部分,一个是 Sdk 另一个是 targets 文件夹 打开 SDK 文件夹里面,可以 Sdk.props...和 Sdk.targets 两个文件,实际上这两个文件实际作用就是被 VisualStudio 或 dotnet 构建器发现,而核心逻辑都是通过 Import 引用 targets 文件夹里面的代码...)\Microsoft.NET.Sdk.WindowsDesktop.targets "/> 下面就来聊聊 targets 文件夹里面的内容,在这个文件夹里面包含了 xx.targets...按照编译器约定,其中 props 文件用来定义属性,而 targets 文件用来定义执行逻辑 下面从 props 文件开始讲,在 Microsoft.NET.Sdk.WindowsDesktop.props...在 targets 文件里面主要是用来更改构建步骤,功能如下 移除重复页面引用 提示构建重复 提示 SDK 版本警告 移除重复页面引用,需要移除页面里面引用 @(Resource);@(Content

1.4K10

制作通过 NuGet 分发源代码包时,如果目标项目是 WPF 则会出现一些问题(探索篇,含解决方案)

修复错误 找出原因 要了解问题到底出在哪里了,我们需要知道 WPF 究竟在编译过程做了哪些额外事情。WPF 额外编译任务主要在 Microsoft.WinFX.targets 文件。...包自动 Import 部分没有加入到依赖,所以实际上包 .props 和 .targets 文件都不会被 Import 进来,这可能造成部分 NuGet 包在 WPF 项目中不能正常工作。...这是通过 NuGet 包 .targets 文件内容,用来强行替换: 1 2 3 4 5 6 7 8 9 10 <MSBuildAllProjects...ReferencePathTypeName,传入了字符串常量 ReferencePath,这是为了在生成临时项目文件时使用正确引用路径名称。...CompileTypeName,传入了字符串常量 Compile,这是为了在生成临时项目文件时使用正确编译名称。

41240

Roslyn 通过 NuGet 库修改应用程序入口函数

id .targets 文件,如我这里是 lindexi 就创建 lindexi.targets 文件,此时看到文件夹如下 │ .nupkg.metadata │ lindexi.1.0.0...└─services │ └─metadata │ └─core-properties └─_rels 在 lindexi.targets 文件里面可以尝试添加代码,在测试项目每次都需要运行...git clean -xdf 清理之后才可以使用 dotnet run 运行,这样就可以减少打包 在 targets 文件里面写内容,只需要下一次在测试项目使用 dotnet run 就会使用 先通过...WriteLinesToFile写一个新文件,这个文件里面包括主函数 然后在 StartupObject 指定入口函数为刚才创建文件targets 文件定义临时文件存放路径 <PropertyGroup...$(IntermediateOutputPath) 是常量,更多请看项目文件已知属性(知道了这些,就不会随便在 csproj 写死常量啦) - walterlv 上面代码是定义路径是 obj 文件

48610

三种方法设置 .NETC# 项目的编译顺序,而不影响项目之间引用

但是,现在 B 项目可能仅仅只是一个工具项目,或者说 A 项目编译之后程序集并不需要 B,仅仅只是将 B 打到一个包,那么我们其实需要仅仅是 B 项目先编译而已。...ReferenceOutputAssembly 解决方案依赖 MSBuild 编译任务 位置 项目文件(csproj)或编译文件(*.props / *.targets) 解决方案文件(sln) 项目文件...(csproj)或编译文件(*.props / *.targets) 编译项目 ✔️生效 ❌无效 ✔️生效 编译解决方案 ✔️生效 ✔️生效 ✔️生效 拷贝依赖项目的输出文件 否 ⚠是 否 要求匹配目标框架...) 位置:代码可以写到哪些文件 编译项目:使用 dotnet build 或者 msbuild 命令来编译时,传入项目文件 编译解决方案:使用 dotnet build 或者 msbuild 命令来编译时...,传入解决方案文件 拷贝依赖项目的输出文件:如果 A 项目引用 B 项目,那么 B 项目的输出文件会被自动拷贝到 A 项目的输出目录 要求匹配目标框架:必须匹配框架才能引用,例如 net48 能引用

42620

Visual Studio 2017 以前旧格式 csproj Import 进来 targets 文件有时不能正确计算属性(PropertyGroup)和集合(ItemGroup

我在之前博客中有教大家如何编写 NuGet 工具包,其中就有编写 .targets 文件。...这是一个 .targets 文件,项目安装此 NuGet 包之后就会自动 Import 这个 targets 文件。...在编译期间,执行一个私有的 Target,收集所有收集到文件夹,形成一个 SourceFusionDirectory 集合。然后将集合所有字符串视为文件夹,创建这几个文件夹。...在新有 Sdk csproj ,这个 targets 文件执行没有问题。但是,对于旧 csproj 来说,就经常出现这几个属性为空或者部分为空情况。...原因 究其原因,这是 MSBuild 对项目文件(csproj)解析和 Visual Studio 对项目文件解析是不同

17730

解读 Microsoft.NET.Sdk 源码,你能定制各种奇怪而富有创意编译过程

更新于 2018-08-12 08:05 在 csproj ,Project Sdk 属性是 MSBuild 15.0 开始支持,也就是 Visual Studio...有了 Sdk 属性存在,MSBuild 编译过程能够扩展得非常强大,而不止是过去 Import 一个 props 和 targets 文件。...▲ 我计算机上 Sdk 文件夹 Sdk NuGet 部分在 GitHub 上仓库地址: NuGet.Client/src/NuGet.Core at dev · NuGet/NuGet.Client...Sdk 文件 Sdk.props 和 Sdk.targets 是会被默认 Import ,这一点在官方文档 How to: Reference an MSBuild Project SDK -...Microsoft.NET.Sdk 主要任务 在 Sdk 文件搜索 Target 节点个数,我得到了 174 个(随 .NET Core 2.1 发布);不过有一些是同名,会被重写(类似于 C

1.3K30
领券