首页
学习
活动
专区
圈层
工具
发布

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

.NET 扩展编译用的文件有 .props 文件和 .targets 文件。不给我选择还好,给了我选择之后我应该使用哪个文件来编写扩展编译的代码呢?...不过大概阅读一下就好,这只是 .props 和 .targets 文件的一些应用。文章比较长,你可以考虑稍后阅读。...工具包 - walterlv 如何创建一个基于命令行工具的跨平台的 NuGet 工具包 - walterlv 当我们创建的 NuGet 包中包含 .props 和 .targets 文件的时候,我们相当于在项目文件...-- 当生成 WPF 临时项目时,不会自动 Import NuGet 中的 props 和 targets 文件,这使得在临时项目中你现在看到的整个文件都不会参与编译。...WPF 临时项目不会 Import NuGet 中的 props 和 targets 可能是 WPF 的 Bug,也可能是刻意如此。

1.9K20

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

从对比中我们就能明显看出新 csproj 文件的优势: 文件小,易读易写 在版本管理中更容易解冲突 NuGet 包的引用没有路径要求,这意味着开发者可以任意指定 NuGet 包的位置 嵌套的引用不需要重复指定...第五步:删除 Properties 文件夹和里面的所有文件,因为这些信息已经被 csproj 文件记录并自动生成了。...比如,你可能放入项目的不止有 cs 文件,还有其他各种用途的资源——你需要重新选中他们然后在属性面板中设置文件的生成属性。...然而我并不知道是否是因为旧版本的 Visual Studio 2017 不支持在新 csproj 中编译 XAML。...但是,只有使用了 Microsoft.NET.Sdk 的新 csproj 文件才会在执行了此命令后重新生成正确的包引用缓存文件;原来的格式并不会生成此文件,也就是说,无法修复。

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

    .Net Core迁移到MSBuild的多平台编译问题

    Scott Hanselman也在博客中发文教大家怎么使用新的.NET SDK RC4工具将project.json转换到MSBuild的.csproj项目系统。...MSBuild 项目文件的格式使开发人员能够充分描述哪些项需要生成,以及如何利用不同的平台和配置生成这些项。...另外,项目文件的格式还使开发人员能够创作可重用的生成规则,这些规则可以分解到不同的文件中,以便可以在产品内的不同项目之间一致地执行生成。   ...二、定义多平台 project.json 在project.json项目配置中定义多平台,使用的是”frameworks”节点来配置的,并且在每个平台节点下也配置了对应的项目引用或依赖。...在dotnet cli中也集成了msbuild,即dotnet build。

    1.2K20

    .Net Core迁移到MSBuild平台(二)

    一、前言 在上一篇文章.Net Core迁移到MSBuild的多平台编译问题中,简单的讲了下新的项目配置文件中的节点配置,这篇我将用一些例子来详细讲下从project.json迁移到msbuild过程的节点配置...做过完整迁移新项目配置文件的朋友,肯定会觉得新的项目配置文件Msbuild的配置太扯了,虽然能直接编辑项目文件,但整个配置文件中没有了像project.json中的智能提示,当你在打开文件后你就会发现以前很轻松能写出来的..." } 在csproj的配置中并没有对应的定义,它只会有项目文件名相同如:MyProjectName.csproj 程序集版本 (Version) { "version": "1.0.0-alpha....csproj项目配置文件中没有对应的配置节点,只有目标框架定义: netcoreapp1.1 之前想要编译出独立发布的可执行文件,...在dotnet cli中也集成了msbuild,即dotnet build。

    2.1K20

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

    ,在这个文件夹中的文件会在编译时拷贝到输出目录(保持文件夹结构) + content/ // 这里放 .props 和 .targets 文件,会自动被 NuGet 导入,成为项目的一部分(要求文件名与包名相同...) + build/ // 这里也是放 .props 和 .targets 文件,会自动被 NuGet 导入,成为项目的一部分(要求文件名与包名相同) + buildMultiTargeting/ //...第三步:编写 Target .targets 文件是对项目功能进行扩展的关键文件,由于安装 NuGet 包会自动导入包中的此文件,所以它几乎相当于我们功能的入口。 现在,我们需要徒手编写这个文件了。...我们在 buildMultiTargeting 文件夹里的 targets 文件中写以下内容,这样我们的注意力便可以集中在前面的 targets 文件中了。 <!...加入差量编译支持 在本文的例子中,当你每次编译时,虽然核心的编译流程不怎么耗时,不过那个命令却是每次都执行。如果你觉得此命令的执行非常耗时,那么建议加入差量编译的支持。

    1.5K20

    MSBuild入门(续)

    MSBuild基本概念(续) 在上一篇简单的介绍了下MSBuild中的四个基本块,每块介绍比较单薄,在这里对在大多数的项目模版生成的*.*proj文件中比较常见一些用法和概念做些补充。...属性除了可以在项目文件中声明是赋值外,在MSBuild命令行也允许设置属性的值(语法:/p:propertyName=value)。...是在项目文件中很常见的用法。 MSBuild项 项大都是用来引入文件用的,而文件会有一些附加信息,比如版本,语言等,而这些附加信息在项目文件中是以项的子元素的出现的,称为项的元数据。...Import元素像是一个占位元素,MSBuild在执行到此时会用*.targets替换掉此元素,就像本来就声明在这里一样,所以和*.targets文件有关的所有保留属性会被重置。...Import元素对导入文件的扩展名无要求,文件是正确的项目文件就行,但一般约定为*.targets。 总结和备注 了解了以上知识点后,阅读一般的项目模版生成的项目文件(*.

    1.3K90

    如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包

    ,在这个文件夹中的文件会在编译时拷贝到输出目录(保持文件夹结构) + content/ // 这里放 .props 和 .targets 文件,会自动被 NuGet 导入,成为项目的一部分(要求文件名与包名相同...) + build/ // 这里也是放 .props 和 .targets 文件,会自动被 NuGet 导入,成为项目的一部分(要求文件名与包名相同) + buildMultiTargeting/ //...我们在 buildMultiTargeting 文件夹里的 targets 文件中写以下内容,这样我们的注意力便可以集中在前面的 targets 文件中了。 在 C# 代码和 .targets 文件中的互相操作。...NuGet 的文件夹结构 编写 Task 和 Target 新增功能、调试和测试 如果你在实践的过程中遇到了各种问题,欢迎在下面留言,一般我会在一天之内给予回复。

    1.9K10

    如何:修改C++项目属性和目标,而无需更改项目文

    如何:修改C++项目属性和目标,而无需更改项目文件 可以从 MSBuild 命令提示符处重写项目属性和目标而无需更改项目文件。 当你想要暂时或偶尔应用某些属性时,这非常有用。 ...重要 可以使用 Visual Studio 中的 XML 编辑器或任何文本编辑器来创建 .props 或 .targets 文件。不要在此情况下使用“属性管理器”,因为它会将属性添加到项目文件中。...重写项目属性: 重写项目目标: 还可以使用/p: 选项在 msbuild 命令行上设置任一选项: cmd复制 > msbuild myproject.sln /p:ForceImportBeforeCppTargets...="C:\sources\my_props.props" > msbuild myproject.sln /p:ForceImportAfterCppTargets="C:\sources\my_target.targets..." 以这种方法重写属性和目标等同于将以下导入添加到该解决方案的所有 .vcxproj 文件: cmd复制

    60110

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

    传统 csproj 文件中有大量的重复或者相似内容,只为 msbuild 和 Visual Studio 能够识别整个项目的属性和结构,以便正确编译项目。...在了解 csproj 文件中各个部件的作用之前,这似乎很难回答。...前面我们了解到 csproj 文件致力于脱离语义,所以分开两个地方写几乎只是为了可读性考虑。 那么前面那个 Import 和后面的 Import 在含义上有何区别?思维导图的括号中我已说明了含义。...前面是为了导入属性(props),后面是为了导入 Targets。...新格式通过 Microsoft.NET.Sdk 为我们导入了更现代化的 .props 和 .targets,而旧格式需要考虑到兼容性压力,只能引入旧的那些 .targets。

    3.5K10

    .NET Core New csproj 如何发布可执行文件

    一、前言   .NET工具链在最新的Preview3版本中,引入了新的MSBuild项目系统,项目文件又回归了.csproj的XML文件来管理,项目文件、包引用、程序集引用、.NET Core工具集、发布内容定义等内容...本文主要将主要讨论,如何在新的项目系统中(.csproj)发布可执行文件。...我们都知道在之前的版本中,项目文件是通过project.json文件来管理项目和包引用的,那么通过删除 dependencies->Microsoft.NETCore.App-> "type": "platform...所为可执行文件就是在目标机器上,不需要安装.NET Core SDK或任何Runtime,就可以执行的文件。...二、生成可执行   在新的.csproj项目文件中,我们要想发布一个可执行文件,就在手动创建名为的节点,在这个节点下面,添加RuntimeIdentifiers也就是以前的

    1.7K30

    在项目文件 csproj 中或者 MSBuild 的 Target 中使用 % 引用集合中每一项的属性

    在编写项目文件或者 MSBuild Target 文件的时候,我们经常会使用 来定义集合中的一项。在定义的同时,我们也会额外指定一些属性。...在定义 WalterlvY 集合的时候,我们使用了 %(Compile.FileName) 来获取编译文件的文件名。...于是,你在警告信息中看到的两个警告信息里面,一个输出了 Compile 集合中每一项的标识符(通常是相对于项目文件的路径),另一个输出了每一个 Compile 项中的 FileName 属性。...需要注意,如果 % 得到的项中某个属性为空,那么这一项在最终形成的新集合中是不存在的。...本文会经常更新,请阅读原文: https://blog.walterlv.com/post/msbuild-referencing-metadata.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验

    1.6K50

    在 MSBuild 编译过程中操作文件和文件夹(检查存在创建文件夹读写文件移动文件复制文件删除文件夹)

    本文整理 MSBuild 在编译过程中对文件和文件夹处理的各种自带的编译任务(Task)。 ---- Exists 检查文件存在 使用 Exists 可以判断一个文件或者文件夹是否存在。...注意无论是文件还是文件夹,只要给定的路径存在就返回 true。可以作为 MSBuild 属性、项和编译任务的执行条件。...下面的例子是将输出文件移动到一个专门的目录中,移动后,所有的文件将平级地在输出文件夹中(即所有的子文件夹中的文件也都被移动到同一层目录中了)。...即便目标文件是只读的,也会覆盖。 Copy 复制文件 下面的例子是将输出文件拷贝到一个专门的目录中,保留原来所有文件之间的目录结构,并且如果文件没有改变则跳过。...可以在编译期间,将一些信息写到文件中以便后续编译的时候使用,甚至将代码写到文件中以便动态生成代码。

    1.9K20
    领券