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

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

从零开始制作 NuGet 源代码包(全面支持 .NET Core / .NET Framework / WPF 项目) - walterlv 如何创建一个基于 MSBuild Task 的跨平台的 NuGet...工具包 - walterlv 如何创建一个基于命令行工具的跨平台的 NuGet 工具包 - walterlv 当我们创建的 NuGet 包中包含 .props 和 .targets 文件的时候,我们相当于在项目文件...,那么请写到 .props 里面 这样,所有的 NuGet 包或者扩展的编译流程都将可以访问到你设置的属性的值 如果你是使用属性,或者按条件设置属性,那么请写到 .targets 里面 因为这个时候多数的属性已经初始化完毕...-- 当生成 WPF 临时项目时,不会自动 Import NuGet 中的 props 和 targets 文件,这使得在临时项目中你现在看到的整个文件都不会参与编译。...-- 因为这里使用到了 `Configuration` 属性,需要先等到此属性已经初始化完成再使用,否则我们会拿到非预期的值。

99220

项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦)

项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦) 发布于 2018-05-10 13:49...---- “项目文件中的已知属性系列”分为两个部分: 项目文件中的已知属性(知道了这些,就不会随便在 csproj 中写死常量啦) - 吕毅 本文:项目文件中的已知 NuGet 属性(使用这些属性,创建...项属性 文件 为了脱离 nuspec 文件来打包,csproj 中需要对特殊用途的文件设置特别的 NuGet 属性。...例如 Pack 属性可以额外指定一或一组通配符文件需要被打包到 NuGet 包中;PackagePath 则指定了打包到 NuGet 包的路径(NuGet 会通过扩展名来自动识别这是文件夹还是文件,所以可以通过这个属性来重新指定名称... 引用的项目或包中的指定部分是本项目的依赖项。默认为 all。 引用的项目或包中的指定部分不是本项目的依赖项,应该排除。

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

    Roslyn 打包自定义的文件到 NuGet 包

    本文告诉大家如何在打包的时候加上需要放在包里面的文件 在 VisualStudio 使用新项目格式快速打出 Nuget 包 告诉大家快速打包的方法,但有时候我需要将本地的一些资源或依赖也放在包里面,此时就需要用到下面的方法...在项目里面引用的资源,可以通过在引用的时候添加 Pack 属性设置打包,使用 PackagePath 属性设置打包的时候放在包里面的哪个文件夹 例如将项目里面引用的 林德熙是逗比.txt 打包放在 lib...包id.targets 才会被执行,对应的 props 文件也相同 如果是自己手写文件名,在更改 NuGet 包 id 的时候如果没有更改,或复制不对,那么会发现没有执行 简单的解决方法是在打包的时候自动修改对应的文件包... 使用 $(MSBuildThisFileDirectory) 拿到当前文件的文件夹,此时通过上一层文件就可以拿到 NuGet 包的文件夹。...获取对应的文件进行输出到软件编译输出文件夹 关于文件复制请看 Roslyn 如何使用 MSBuild Copy 复制文件 如果这个库文件只是需要添加资源文件,不需要加上 lib 文件,也就是不添加引用,

    1K20

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

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

    1.8K10

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

    从对比中我们就能明显看出新 csproj 文件的优势: 文件小,易读易写 在版本管理中更容易解冲突 NuGet 包的引用没有路径要求,这意味着开发者可以任意指定 NuGet 包的位置 嵌套的引用不需要重复指定...第三步:安装此前已经安装好的 NuGet 包,或者把原来的 packages.config 文件里的 NuGet 配置复制到 csproj 文件中,并统一修改格式: 从 文件,还有其他各种用途的资源——你需要重新选中他们然后在属性面板中设置文件的生成属性。...其实这是只有新的项目文件才会出现的编译错误,而错误原因是 NuGet 的缓存文件中与包引用相关的信息已经不正确了,需要运行 nuget restore 或者 dotnet restore 重新更新此文件才行...ProjectTypeGuid 这个属性标志着此项目的类型,比如指定为 WPF 自定义控件库的项目新建文件的模板有自定义控件,而普通类库则不会有。 特别注意!

    1.7K20

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

    想了解 PrivateAssets 的含义一起相关属性,可以阅读我的另一篇文章项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦) - 吕毅。...其实对于不认识的文件,None 就是默认值);Include 表示相对于项目文件的路径(支持通配符);Pack 表示这一项要打包到 NuGet;PackagePath 表示这一项打包到 NuGet 中的路径...(如果你想了解更多 csproj 中的 NuGet 属性,可以阅读我的另一篇文章:项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦) - 吕毅)...关于这些属性更详细的解释,依然可以参见:项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦) - 吕毅。...,就不会随便在 csproj 中写死常量啦) - 吕毅 项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦) - 吕毅 当然,还有一些正在编写,过一段时间可以阅读到

    1.7K10

    如何在 MSBuild 中正确使用 % 来引用每一个项(Item)中的元数据

    ---- 定义 Item 的元数据 就像下面这样,当引用一个 NuGet 包时,可以额外使用 Version 来指定应该使用哪个特定版本的 NuGet 包。...如果你不是用的 Message,而是定义一个其他的属性,使用 @(_WalterlvItem):%(Url) 作为属性的值,那么这个属性也会为每一个项都计算一次值。...当然最终这个属性的值就是最后一项计算所得的值。 也许可以帮你回忆一下,如果我们不写 %(Url) 会输出什么。当只输出 @(WalterlvItem) 的时候,会以普通的分号分隔的文字。...关于使用 exe 进行自定义编译的部分可以参考我的另一篇博客: 如何创建一个基于命令行工具的跨平台的 NuGet 工具包 - walterlv 关于写文件的部分可以参考我的另一篇博客: 在 MSBuild...编译过程中操作文件和文件夹(检查存在/创建文件夹/读写文件/移动文件/复制文件/删除文件夹) - walterlv 关于项元数据的其他信息 一些已知的元数据: MSBuild Well-known Item

    1.2K10

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

    在编写项目文件或者 MSBuild Target 文件的时候,我们经常会使用 来定义集合中的一项。在定义的同时,我们也会额外指定一些属性。...然而这些属性如何拿到并且使用呢?本文将介绍使用方法。 ---- 将下面的代码放到你项目文件的末尾,最后一个 的前面,可以在编译的时候看到两个新的警告。...于是,你在警告信息中看到的两个警告信息里面,一个输出了 Compile 集合中每一项的标识符(通常是相对于项目文件的路径),另一个输出了每一个 Compile 项中的 FileName 属性。...FileName 属性是 Compile 会被 Microsoft.NET.Sdk 自动填充。 需要注意,如果 % 得到的项中某个属性为空,那么这一项在最终形成的新集合中是不存在的。...所以,如果存在可能不存在的属性,那么建议先进行拼接再统一处理拼接后的值: 1 2 3 4 5 6 <ItemGroup

    92050

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

    其实对于不认识的文件,None 就是默认值);Include 表示相对于项目文件的路径(支持通配符);Pack 表示这一项要打包到 NuGet;PackagePath 表示这一项打包到 NuGet 中的路径...(如果你想了解更多 csproj 中的 NuGet 属性,可以阅读我的另一篇文章:项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦) - 吕毅)...关于这些属性更详细的解释,依然可以参见:项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦) - 吕毅。...更多 MSBuild 全局参数,可以参考我的另一篇文章项目文件中的已知属性(知道了这些,就不会随便在 csproj 中写死常量啦) - 吕毅。...,就不会随便在 csproj 中写死常量啦) - 吕毅 项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦) - 吕毅 当然,还有一些正在编写,过一段时间可以阅读到

    1.3K20

    .NET MSBuild 扩展编译时什么时候用 BeforeTargets AfterTargets 什么时候用 DependsOnTargets?

    关于 NuGet 源代码包的制作方法,可以扩展阅读: 将 .NET Core 项目打一个最简单的 NuGet 源码包,安装此包就像直接把源码放进项目一样 从零开始制作 NuGet 源代码包(全面支持 ....例如上面的 CopyOutputLibToFastDebug 这个将输出文件复制到另一个目录的编译目标(Target),依赖于一个 MainProjectPath 属性,因此计算这个属性值的编译目标(Target...例如我们做一个 NuGet 包,这个 NuGet 包的 .targets 文件中写了下面几个 Target: _WalterlvEvaluateProperties 用于初始化一些属性和参数,其他所有的..._WalterlvPackOutput 将目标项目中生成的文件进行自定义打包 那么我们改如何为每一个 Target 设置正确的属性呢?...会根据 NuGet 包用户的设置有条件地引入一些额外的源代码 那么这个时候我们前面写的用于引入源代码的 _WalterlvIncludeSourceFiles 编译目标其依赖的 Target 会更多。

    63320

    .NET 项目自定义 MSBuild Task

    1 MSBuild Task 利用 MSBuild Task, 可以在编译阶段,完成很多自定义的操作。比如最常见的,就是在编译完成之后,复制一些额外的文件到输出目录中。...4 将自定义 Task 打包成 nuget 包 基本流程参照吕毅的博客,所以里面设计到的基本概念就不详细介绍了,我这里做了一点简化。...也可能 .targets 文件名是必须与 dll 的输出文件名一致?或者必须与 AssemblyName 的设置一致?或者是必须与 nuget 包的名称一致?...这里没有做进一步的探索,总之,要注意这个名称问题,不能随便取。不然其它项目在使用 nuget 包引用时,不会自动加载这个 .targets 文件。...想法的源头来自这里:git 禁止大文件提交到仓库中 参考资料 团队项目利用Msbuild自定义Task实现增量发布 - Starup - 博客园 MSBuild入门(续) - Timetombs

    32310

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

    -- 文件太长,做了大量删减 --> 文件太长,做了大量删减,但也可以看到文件格式与 csproj 几乎是一样的。此文件中,根据其他属性的值有条件地定义了另一些属性。...dll 文件从 MSTest 的 NuGet 包中以链接的形式包含到项目中,并且此文件在 Visual Studio 的解决方案列表中不可见。...NuGet 工具包 - 吕毅 如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包 - 吕毅 每次都要重新编译?...随后根据 PropertyGroup 里面设置的属性正确显示属性面板中的状态,根据 ItemGroup 中的项正确显示解决方案管理器中的引用列表、文件列表。...NuGet 包时自动为我们在 csproj 中插入了以上代码。

    3K10

    如何使用 MSBuild Target(Exec)中的控制台输出

    更新于 2018-09-01 00:03 我曾经写过一篇文章 如何创建一个基于命令行工具的跨平台的 NuGet 工具包,通过编写一个控制台程序来参与编译过程。...将此属性设置为 True,将能够捕获控制台输出到 MSBuild 中。(不过据说典型的程序员是不爱看文档的) 那么,捕获的输出去了哪里呢?...我在 如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包 中提到了使用 Output 来将 Task 中的参数输出出来。而 Exec 也是这么做的。...但如果你希望得到的是一组值(例如新增了一组需要编译的文件),那么需要得到的是 ItemGroup 中的多个值,而不是 PropertyGroup 中的单个值。...:@(AdditionalCompile)" /> CreateItem 的转换分隔符 CreateItem 从属性或字符串转到项是根据分隔符来区分的。

    2.5K10

    如何编写基于 Microsoft.NET.Sdk 的跨平台的 MSBuild Target(附各种自带的 Task)

    的项目文件列表和项目属性中显示;而 内部的 和 是在编译期间动态生成的,不会在 Visual Studio 中显示;不过,它为我们提供了一种在编译期间动态生成文件或属性的能力...MSBuild Task 的跨平台的 NuGet 工具包 中利用这个进行调试) Warning 显示一个警告信息 Error 报错(这样,编译就会以错误结束) CombinePath, ConvertToAbsolutePath...Exec 执行一个外部命令(我在 如何创建一个基于命令行工具的跨平台的 NuGet 工具包 一文中利用到了这个 Task 执行命令) WriteCodeFragment 生成一段代码 WriteCodeFragment...Task WriteLinesToFile 向文件中写文字 WriteLinesToFile Task 提供的 Task 还有更多,如果上面不够你写出想要的功能,可以移步至官方文档翻阅:MSBuild...使用自己写的 Task 我有另外的一篇文章来介绍如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包 - 吕毅。

    1.1K10

    让跨平台的 MSBuilddotnet build 的 Target 支持差量编译

    一个差量编译的例子 先看一个 Target 的例子,这里例子来源于我的另一篇文章如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包 - 吕毅。...NuGet 工具包 - 吕毅 差量编译的关键 每一个 Target 都有 Inputs 和 Outputs 属性,可以设置,也可以不用设置。...假设我们指定 Inputs 为 @(Compile),Outputs 指定为某个 xxx.exe 生成的临时文件的位置(在 如何创建一个基于命令行工具的跨平台的 NuGet 工具包 一文中,我假定为了...例如我们有另一个 ,它的作用是生成一个属性的值,或者一组文件的名字;而另外一个 使用这个属性的值和这组文件。...典型的例子如我在如何创建一个基于命令行工具的跨平台的 NuGet 工具包 中写的那个 NuGet 工具。

    1.4K10

    从零开始学习 dotnet 编译过程和 Roslyn 源码分析

    dotnet build 基础 你需要先了解 csproj 文件的结构,以便进行后续的学习: 理解 C# 项目 csproj 文件格式的本质和编译流程 - 吕毅 项目文件中的已知属性(知道了这些,就不会随便在...复制文件 - 林德熙 如何使用 MSBuild Target(Exec)中的控制台输出 - 吕毅 如何在 MSBuild Target(Exec)中报告编译错误和编译警告 - 吕毅 更高级的 Target...基础 项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦) - 吕毅 可以使用 NuGet 做一些不是传统 dll 引用的功能: Roslyn 通过...NuGet 工具包 - 吕毅 如何创建一个基于命令行工具的跨平台的 NuGet 工具包 - 吕毅 在制作跨平台的 NuGet 工具包时,如何将工具(exe/dll)的所有依赖一并放入包中 - 吕毅 NuGet...的坑很多,有些可以解,有些需要规避: 帮助官方 NuGet 解掉 Bug,制作绝对不会传递依赖的 NuGet 包 - 吕毅 MSBuild/Roslyn 和 NuGet 的 100 个坑 - 吕毅 Roslyn

    78340
    领券