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

Roslyn 开发 NuGet 包的 Task 编译可能遇到的问题

在写 msbuild 脚本的时候,或修改项目文件的时候,将会使用到很多的微软提供的 Task 命令。...在需要复杂的编译的时候,可以通过自己定义一个任务用来定义编译 如何入门开发请看 如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包 - walterlv 本文只会补充一些开发的过程会遇到的坑...版本选择 开发的 Task 需要引用以下两个库 Microsoft.Build.Framework Microsoft.Build.Utilities.Core 这也就默认要求使用 .NET Framework...4.7.2 和 .NET Standard 2.0 以上 判断当前编译器平台 在跨平台的开发可能用户使用的是 dotnet core 版本,于是需要一个 dotnet core 版本的 Task 让他进行编译...使用下面代码可以判断当前点编译器是运行在哪个平台 '$(MSBuildRuntimeType)' == 'Core' 如果上面代码返回 true 那么编译器是 dotnet core 平台 以上面代码判断可以写出对使用

52910

从零开始针对 .NET 应用的 DevOps 运营实践 - 运行环境搭建

,我们在开发过程中使用 Visual Studio 进行程序编译时,其实也是会借用 MSBuild 来进行的 因此,最简单的办法,就是在服务器上安装 VS 即可,当然,这个过于简单粗暴了,以及在服务器上安装我们开发使用的...IDE 也过于浪费,所以这里还是会选择独立的安装 MSBuild 与 VS 相似,MSBuild 也有不同的版本,为了避免一些莫名其妙的问题,在 MSBuild 的版本选择上,最好选择与你们开发时用的...VS 匹配的版本,因为我们在开发中会使用到了 VS 2017 和 VS 2019 这两个版本,所以这里我会安装两个 MSBuild 到服务器上 对于 MSBuild,之前很多文章中说可以直接把你本地电脑中的...VS 所包含的 MSBuild,丢到服务器上就可以了,经过我的多次尝试,在踩坑的路上越走越远,这里还是建议你通过 Visual Studio Build Tools 进行安装 在 VS 的下载页面,这里是以...这里你可以直接通过我给出的这两个地址,直接下载对应的生成工具,打开软件,找到 MSBuild 这个组件进行安装即可 Visual Studio 2017 Build Tools:https://visualstudio.microsoft.com

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

    从零开始针对 .NET 应用的 DevOps 运营实践 - 运行环境搭建

    ,我们在开发过程中使用 Visual Studio 进行程序编译时,其实也是会借用 MSBuild 来进行的 因此,最简单的办法,就是在服务器上安装 VS 即可,当然,这个过于简单粗暴了,以及在服务器上安装我们开发使用的...IDE 也过于浪费,所以这里还是会选择独立的安装 MSBuild 与 VS 相似,MSBuild 也有不同的版本,为了避免一些莫名其妙的问题,在 MSBuild 的版本选择上,最好选择与你们开发时用的...VS 匹配的版本,因为我们在开发中会使用到了 VS 2017 和 VS 2019 这两个版本,所以这里我会安装两个 MSBuild 到服务器上 对于 MSBuild,之前很多文章中说可以直接把你本地电脑中的...VS 所包含的 MSBuild,丢到服务器上就可以了,经过我的多次尝试,在踩坑的路上越走越远,这里还是建议你通过 Visual Studio Build Tools 进行安装 在 VS 的下载页面,这里是以...这里你可以直接通过我给出的这两个地址,直接下载对应的生成工具,打开软件,找到 MSBuild 这个组件进行安装即可 Visual Studio 2017 Build Tools:https://visualstudio.microsoft.com

    84931

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

    一篇介绍写基于 MSBuild Task 的 dll,一篇介绍写任意的命令行工具,可以是用于 .NET Framework 的 exe,也可以是基于 .NET Core 的 dll,甚至可以是使用本机工具链编译的平台相关的各种格式的命令行工具...:创建一个项目,用来写工具的核心逻辑 为了方便制作跨平台的 NuGet 工具,新建项目时我们优先选用 .NET Core 控制台项目。...-- 由于 .NET Core 本身即具备跨平台的特性,所以我们直接基于 .NET Core 开发 --> netcoreapp2.0开发依赖,设置为 true 将阻止包作为依赖传递给下一个项目。(事实上这又是官方的一个骗局!因为新版本的 NuGet 竟然去掉了这个功能!...有两种不同的方式: 直接传数据,这些数据可以被捕获成属性或者项,具体可以阅读我的另一篇博客: 如何使用 MSBuild Target(Exec)中的控制台输出 报告编译警告和编译错误,具体可以阅读我的另一篇博客

    1K20

    .net framework 4.0的NuGet包制作

    为啥做这个呢,因为要将公司内部的老的.NET程序所引用的DLL进行统一管理。这里服务端使用了一个叫做NuGetServer(官网:NuGet Server)的开源工具,部署在内部的Web服务器上。...制作NuGet包,我是先从.NET Standard 2.0的SDK风格的文件去创建的,特别容易。但是.NET 4.0这种废了好大周折!...试过直接通过DLL生成,但是会遇到包描述、版本等信息不自动更新的问题,最重要的DLL所引用的NuGet.org的包,不能自动包含进去。...最后呢使用Tools>External Tools(工具>外部工具)定义了一个命令。 要确保MSBUILD和NUGET好用,需要找到系统环境变量,添加路径(记得重启电脑,以便生效)。...; nuget pack roj ; nupkg= dir *.nupkg;执行目录选择 需要生成的时候,点击一下要生成的Project,然后就可以点击Tools > 4.0NuGet命令 稍等片刻就生成了

    1.7K50

    MSBuildRoslyn 和 NuGet 的 100 个坑

    MSBuild 不愧是强大的编译器,它提供的扩展机制让你几乎可以编译任何类型的文件或项目;Roslyn 是全新编写的一套编译器,不过它保留了 MSBuild 的大部分机制;NuGet 是 .NET 生态系统中的包管理机制...我摘取了一些入门系列文章,也许你可以通过阅读这些来了解下: 理解 C# 项目 csproj 文件格式的本质和编译流程 迁移 csproj 文件到基于 Microsoft.NET.Sdk 创建基于 MSBuild...不存在的版本(新版本已修复) 如果某个包的特定版本在所有源中不存在,那么安装此包的项目再也无法更新或者卸载此包了(也就别想再编译通过了)。....nuget.g.props 和 .nuget.g.targets 使用 Microsoft.NET.Sdk 作为 Sdk 的项目文件会自动在 obj 文件夹下生成 project.assets.json...(我的 Visual Studio 版本 2017.7.4,Microsoft.NET.Sdk 版本 2.1.300。) 这时,把这两个文件重新在 csproj 中 Import 一次却能正常。

    41030

    MSBuildRoslyn 和 NuGet 的 100 个坑

    更新于 2018-09-04 13:08 MSBuild 不愧是强大的编译器,它提供的扩展机制让你几乎可以编译任何类型的文件或项目;Roslyn 是全新编写的一套编译器,不过它保留了...MSBuild 的大部分机制;NuGet 是 .NET 生态系统中的包管理机制,被原生集成在新的 Microsoft.NET.Sdk 中。...我摘取了一些入门系列文章,也许你可以通过阅读这些来了解下: 理解 C# 项目 csproj 文件格式的本质和编译流程 迁移 csproj 文件到基于 Microsoft.NET.Sdk 创建基于 MSBuild...但是,只有使用了 Microsoft.NET.Sdk 的新 csproj 文件才会在执行了此命令后重新生成正确的包引用缓存文件;原来的格式并不会生成此文件,也就是说,无法修复。...(我的 Visual Studio 版本 2017.7.4,Microsoft.NET.Sdk 版本 2.1.300。) 这时,把这两个文件重新在 csproj 中 Import 一次却能正常。

    1.4K20

    如何在 Visual Studio 2019 中设置使用 .NET Core SDK 的预览版(全局生效)

    Visual Studio 2019 中提供了使用 .NET Core SDK 预览版的开关。但几个更新的版本其开关的位置不同,本文将介绍在各个版本中的位置,方便你找到然后设置。...> Use previews of the .NET Core SDK (需要 restart) 如果你是英文版的 Visual Studio,也可以参考英文版: Tools -> Options Environment...,在这里: 工具 -> 选项 项目和解决方案 -> .NET Core -> 使用 .NET Core SDK 预览版 如果你是英文版的 Visual Studio,也可以参考英文版: Tools -...也就是说,你在 Visual Studio 2019 中进行了此设置,在命令行中使用 MSBuild 或者 dotnet build 命令进行编译也会使用这样的设置项。...那么这个全局的设置项在哪个地方呢?是如何全局生效的呢?可以阅读我的其他博客: Visual Studio 2019 中使用 .NET Core 预览版 SDK 的全局配置文件在哪里?

    1.7K20

    Jenkins持续集成与自动化部署系统安装配置

    由于我们所做的系统业务复杂,系统庞大,设计到多个系统之间的合作,而核心系统更是采用分布式系统架构,由于当时对系统划分的不合理等等原因导致每次发版都会设计到多个系统的发布,小的版本三五个,大的版本十几个甚至几十个系统的同时发布...二、Jenkins 安装     Jenkins有windows版本也有linux版本,由于我们项目都是基于.net freamwork进行开发,而jenkins构建需要编译.net程序,为了更方便的编译...(注意:Jenkins服务器需安装MSBuild,建议在Jenkins上安装VS开发工具,可以在构建出问题的时候打开VS调试,省去很多不必要的麻烦)。...程序的物理路径 注意:此处MSBuild.exe必须与程序所使用freamwork版本相对应,此处我在这就遇到了一个大坑,一开始随便找个一个MSBuild工具,没想到根本编译不了C#6.0的语法。...这也导致了后来我去做其他工作的时候,我们将近一年的时间还是停留在我这半天的研究结果的层面上,而生产环境更是迟迟没有使用。

    1K30

    编写你的专属 MSBuild C# 代码生成器:在保存文件时自动实时生成你的代码

    然后,我研究了下 Grpc.Tools 包里的代码,外加跟他反复讨论,摸清了自动生成代码的方法。 背景知识 本文的知识非常简单,如果只是希望知道怎么实时生成代码的话,把本文后面的代码复制一下就可以了。.../TargetFrameworks 我们做了一个有趣的事情,在这个 Target 里面,显示了“系统版本号”(因为我想让实时编译过程变得更直观) 我们定义了一个 WalterlvDemoFile 项,这是随便取的名字...属性就可以被自动启用了 延伸 在上面那个最简的 Demo 中,我们弹出了个 Windows 版本号,这真的只是为了让你立刻注意到某个代码执行了。...不过,你可以从我的其他博客里找到很多生成代码的方法,比如这篇……还有这篇……还有这这这篇…… 生成代码,从 T 到 T1, T2, Tn —— 自动生成多个类型的泛型 如何创建一个基于命令行工具的跨平台的...NuGet 工具包 如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包 将 .NET Core 项目打一个最简单的 NuGet 源码包,安装此包就像直接把源码放进项目一样 Roslyn

    41610

    基于Win10极简SonarQube C#代码质量分析

    最近公司做的项目是用的Framework开发的,久仰SonarQube大名,今天在本地搭建SonarQube之后对项目进行分析,效果惊人。...-4.3.1.1372-net46.zip 解压之后,设置SonarQube Scanner for MSBuild的环境变量,如我的解压路径是:C:\MyWorkSpace\Tools\sonar-scanner-msbuild...,找到你电脑中的MSBuild.exe并添加到path环境变量,便于后面在命令行中调用MSBuild,我的是在vs 2017的安装目录下 C:\Program Files (x86)\Microsoft...即项目的版本,项目在不同的时期版本也是不一样的,如果方便,可以在sonarQube的服务器中查看到不同的版本代码其中问题的变化 三条命令分别是分析的前期准备,MSBuild编译,将报告上传给SonarQube...界面中功能强大,很多认为绝对发现不了的Bug都展现出来了,还可以查看单元测试的覆盖率,相信如果坚持使用该工具,一定会对编码习惯有很大帮助。

    76220

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

    这些属性的含义完全是由外部来决定的,例如在旧的 csproj 格式中,编译过程中会使用 TargetFrameworkVersion 属性,以确定编译应该使用的 .NET Framework 目标框架的版本...具体是编译过程中的哪个环节哪个组件使用了此属性,我们后面会说。 从这个角度来说,如果你没有任何地方用到了你定义的属性,那为什么还要定义它呢?是的——这只是浪费。...当然如果你非常感兴趣,还可以阅读我另外几篇关于 Target 使用相关的文章: 如何编写基于 Microsoft.NET.Sdk 的跨平台的 MSBuild Target - 吕毅 如何创建一个基于命令行工具的跨平台的..." /> 而引入的这份 .targets 文件便包含了 msbuild 定义的各种核心编译任务。...当我使用 msbuild 编译时,我的地址:C:\Program Files\dotnet\sdk\2.1.300\Sdks\Microsoft.NET.Sdk\build\。

    2.6K10

    ASP.NET Core基础补充08

    当我们安装.NET Core SDK时,默认情况下还将安装.NET Core CLI。因此,我们不需要在开发环境(即我们的本地计算机)上单独安装它。...我们可以使用命令提示符来验证相同的内容,即是否已安装.NET CLI。要进行验证,请打开命令提示符(Windows),终端(Linux)并键入“ dotnet”,然后按Enter,如下所示。...以下命令使用TEMPLATE创建一个新的dotnet核心项目: dotnet new 您可以使用以下方法找到模板列表: dotnet new-l 键入dotnet new -l并按Enter后...,它将显示基于机器上安装的.NET Core版本的可用模板列表,如下图所示: 示例:使用.NET Core CLI创建控制台应用程序 以下命令在当前目录中创建一个与当前目录同名的新控制台项目。...使用 .NET 核心 CLI 命令生成项目 为了构建一个新的或现有的项目,我们需要使用以下“ dotnet build”命令来构建您的.NET Core项目:

    17310

    基于Win10极简SonarQube C#代码质量分析

    最近公司做的项目是用的Framework开发的,久仰SonarQube大名,今天在本地搭建SonarQube之后对项目进行分析,效果惊人。...-4.3.1.1372-net46.zip 解压之后,设置SonarQube Scanner for MSBuild的环境变量,如我的解压路径是:C:\MyWorkSpace\Tools\sonar-scanner-msbuild...,找到你电脑中的MSBuild.exe并添加到path环境变量,便于后面在命令行中调用MSBuild,我的是在vs 2017的安装目录下 C:\Program Files (x86)\Microsoft...即项目的版本,项目在不同的时期版本也是不一样的,如果方便,可以在sonarQube的服务器中查看到不同的版本代码其中问题的变化 三条命令分别是分析的前期准备,MSBuild编译,将报告上传给SonarQube...界面中功能强大,很多认为绝对发现不了的Bug都展现出来了,还可以查看单元测试的覆盖率,相信如果坚持使用该工具,一定会对编码习惯有很大帮助。

    1.6K20

    Roslyn 使用 Directory.Build.props 文件定义编译

    如何使用 Directory.Build.props 文件定义编译 在 MSBuild 的 15 之后,也就是安装了 VisualStudio 2017 就可以使用的新功能,支持新的 csproj 格式...如何把以前的格式升级为 VisualStudio 2017 的新格式请看从以前的项目格式迁移到 VS2017 新项目格式 在 MSBuild 15 的一个新的功能就是让开发者可以自己定义项目信息放在一个文件...最简单的方法是我在每个项目的项目文件里面写版本,但是我有3个项目,每次修改版本就需要修改三个文件,这样的写法感觉一点都不好。 如果我有 100 个项目,那么我一定也不想去修改。...可以看到现在打包的版本是 1.0 ,随意打开一个项目的文件,可以看到还没指定版本 NET.Sdk"> 哪个文件赢就使用哪个文件,不过在这里不需要打,因为这个值使用的是哪一个和写 Import 的地方有关,在上面的代码是处于最里层的 Directory.Build.props 赢,最后的版本就是

    1.2K20

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

    一篇介绍写基于 MSBuild Task 的 dll,一篇介绍写任意的命令行工具,可以是用于 .NET Framework 的 exe,也可以是基于 .NET Core 的 dll,甚至可以是使用本机工具链编译的平台相关的各种格式的命令行工具...:创建一个项目,用来写工具的核心逻辑 为了方便制作跨平台的 NuGet 工具,新建项目时我们优先选用 .NET Core Library 项目或 .NET Standard Library 项目。....NET Core 的 dotnet build (Roslyn) 能够使用此工具编译; - 当然 net47 太新了,只适用于 Visual Studio 2017 的较新版本,如果你需要照顾到更多用户...要点 2: 注意,我们使用 NuGet 包来依赖 Task 框架,但此 NuGet 包要求的最低 .NET Framework 版本为 4.6。...DevelopmentDependency 是为了说明这是一个开发依赖,设置为 true 将阻止包作为依赖传递给下一个项目。(事实上这又是官方的一个骗局!因为新版本的 NuGet 竟然去掉了这个功能!

    1.4K10
    领券