如何在 TargetFrameworks 标记中每个框架运行一次的目标之前创建仅运行一次而不是一次的 MSBuild 目标?

2024-05-06

我有一个我部分拥有的代码生成器工具,现在 csproj 文件可以在其中列出多个目标框架并构建所有这些框架,我试图弄清楚如何使 MSBuild 目标仅在每个目标中生成一次代码无论列出了多少个目标框架,都将运行构建,并让每个目标框架的编译等待代码生成完成。

我目前将其以 TargetFramework 的特定值为条件。例如,Condition="'netstandard2.0' == '$(TargetFramework)'".

这可以避免同时为每个目标框架启动代码生成工具,然后在进程尝试创建/更新相同文件时出现访问被拒绝错误。

然而,其他目标框架会直接尝试编译而不等待代码生成完成,并且在该代码不存在的情况下失败。

我希望每次构建项目时只生成一次代码,并且仅在完成后才开始对每个目标框架进行编译。

每次运行构建时都需要运行它,以防输入发生更改并生成不同的代码。

注意:目前我忽略了一种情况#if FrameworkSpecificDefine用于向代码生成器提供不同的输入代码,以便不同的目标框架导致代码生成器的不同输出。目前,我认为代码生成器的输出在所有目标框架中都是相同且有效的。

Update:在查找 MSBuild 拆分为 TargetFramework 特定构建之前发生的 Target 之后,我可以在之前挂钩构建,我在 VS 中的详细构建输出中看到了这一点:

1>Target _SetBuildInnerTarget:
1>Target _ComputeTargetFrameworkItems:
1>Target DispatchToInnerBuilds:
1>  Using "MSBuild" task from assembly "Microsoft.Build.Tasks.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
1>  Task "MSBuild"
1>    Additional Properties for project "ProjectA.csproj":
1>      TargetFramework=netstandard2.0
1>    Additional Properties for project "ProjectA.csproj":
1>      TargetFramework=net47

然后我将目标设定为BeforeTargets="DispatchToInnerBuilds"它在专门设置 TargetFramework 的单独构建之前运行,并且似乎完全满足我的需求。

(添加到BuildDependsOn属性似乎不再起作用:添加在 Visual Studio 2017 RC 中生成 .NET Core 项目后运行的 msbuild 任务 https://stackoverflow.com/questions/41473503/add-a-msbuild-task-that-runs-after-building-a-net-core-project-in-visual-studio;我怀疑 Microsoft.Common.targets 稍后会以新的 csproj 格式进行评估,并且您在项目文件中执行的任何附加属性都会被 Microsoft.Common.targets 覆盖。)


On 单一目标框架我只用BeforeTargets="PreBuildEvent":

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>
  <Target Name="GenerateVersionInfo" BeforeTargets="PreBuildEvent">
    <Exec Command="your custom command" />
  </Target>
</Project>

on 多目标框架 I use BeforeTargets="DispatchToInnerBuilds"

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;net461</TargetFrameworks>
  </PropertyGroup>
  <Target Name="GenerateVersionInfo" BeforeTargets="DispatchToInnerBuilds">
    <Exec Command="your custom command" />
  </Target>
</Project>

所以我的自定义命令在每次构建之前只执行一次。如果你使用InitialTargets,该命令执行的次数不止一次!例如,如果您保存项目!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 TargetFrameworks 标记中每个框架运行一次的目标之前创建仅运行一次而不是一次的 MSBuild 目标? 的相关文章

  • 无法使用已与其底层 RCW 分离的 COM 对象。在 oledb 中

    我收到此错误 但我不知道我做错了什么 下面的代码在backrgroundworker中 将异常详细信息复制到剪贴板 System Runtime InteropServices InvalidComObjectException 未处理 通
  • 访问私人成员[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通过将类的私有成员转换为 void 指针 然后转换为结构来访问类的私有成员是否合适 我认为我无权修改包含我需要访问的数据成员的类 如果不道德 我
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • 当我使用“control-c”关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收“”

    我是套接字编程的新手 我知道使用 control c 关闭套接字是一个坏习惯 但是为什么在我使用 control c 关闭发送进程后 接收方上的套接字不断接收 在 control c 退出进程后 发送方的套接字不应该关闭吗 谢谢 我知道使用
  • 从父类调用子类方法

    a doStuff 方法是否可以在不编辑 A 类的情况下打印 B did stuff 如果是这样 我该怎么做 class Program static void Main string args A a new A B b new B a
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • 如何返回 json 结果并将 unicode 字符转义为 \u1234

    我正在实现一个返回 json 结果的方法 例如 public JsonResult MethodName Guid key var result ApiHelper GetData key Data is stored in db as v
  • 当操作繁忙时,表单不执行任何操作(冻结)

    我有一个使用 C 的 WinForms 应用程序 我尝试从文件中读取一些数据并将其插入数据表中 当此操作很忙时 我的表单冻结并且无法移动它 有谁知道我该如何解决这个问题 这可能是因为您在 UI 线程上执行了操作 将文件和数据库操作移至另一个
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • ASP.NET MVC 6 (ASP.NET 5) 中的 Application_PreSendRequestHeaders 和 Application_BeginRequest

    如何在 ASP NET 5 MVC6 中使用这些方法 在 MVC5 中 我在 Global asax 中使用了它 现在呢 也许是入门班 protected void Application PreSendRequestHeaders obj
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke

随机推荐

  • 如何在Eclipse中配置Tesseract进行Android开发?

    我已经从事 Android 工作 6 个月了 至此我对Android开发有了基本的了解 现在我想使用 Tesseract 开发一个 OCR Android 应用程序 为此 我从 Tesseract 下载了 android ndk r6b t
  • 在 less 中为 twitter bootstrap 的所有选择器添加前缀

    我想开始学习 Twitter Bootstrap 并将其合并到我的网站中 从表单元素开始 但如果我按原样包含它 它会破坏网站的其余部分 我想为所有选择器添加前缀 以便我可以逐渐添加引导样式的内容 如下所示 div class bootstr
  • 将密码存储到sql中的最佳方法

    在我当前的 C Windows 应用程序中 密码已以纯文本形式存储 这显然不好 所以我只想知道加密密码并存储到 SQL Server 中的最佳方法是什么 我读到使用哈希 盐更好 但我觉得sql 2005中的 EncryptByPassPhr
  • Hadoop:读取ORC文件并放入RDBMS中?

    我有一个以 ORC 文件格式存储的配置单元表 我想将数据导出到 Teradata 数据库 我研究了 sqoop 但找不到导出 ORC 文件的方法 有没有办法让 sqoop 为 ORC 工作 或者有什么其他工具可以用来导出数据 Thanks
  • OpenGL 着色器不与着色器程序链接

    我正在尝试使用 GLFW GLEW 添加着色器 我收到一个错误 指出着色器已加载 但它们没有有效的对象代码 这是我用于加载着色器的代码 class SHADER public void LoadShaders const char vert
  • 如何检查特定作业是否在quartz调度程序中运行#

    我正在使用石英调度程序根据触发器的用户输入来安排写入文件的作业 我想检查作业是否仍在 stop 方法中运行 如何检查作业是否仍在运行 public class JobScheduler static StdSchedulerFactory
  • 将 WebApp 授权给 ADFS 以访问 Dynamics CRM Web API

    我有一个 Web 应用程序需要与 Dynamics CRM 365 Web API 通信 Dynamics CRM 配置为 ADFS 上的依赖方 服务器是 Windows Server 2016 一切都在本地 而不是在 Azure 上 我为
  • 导入 org.ksoap2.SoapEnvelope 时遇到问题

    正在使用网络服务 从互联网上获取了一些示例代码 导入时出现一些错误 import org ksoap2 SoapEnvelope import org ksoap2 serialization SoapObject import org k
  • 如何从 CustomViewController 中更改 RootViewController(在 AppDelegate 中)?

    再会 我的应用程序具有在 AppDelegate 中加载的授权表单 SigninController 登录后 在 SigninController m 中检查 应该出现 TabBarController 作为应用程序的主视图 如何将控制器从
  • BigQuery 数据类型

    我正在开始一个新项目 只是想在定义表模式之前进行验证 BigQuery 是否支持以下以外的其他功能 string integer float boolean BigQuery 数据类型官方文档 https cloud google com
  • python 中打印变量和字符串

    好吧 我知道如何打印变量和字符串 但是我如何打印类似 我的字符串 card price 的内容 它是我的变量 我的意思是 这是我的代码 print I have and here I would like to print my varia
  • 如何在 Dart 中打印美元符号 $

    我实际上需要在 Dart 中在变量之前打印一个美元符号 例如 void main int dollars 42 print I have dollars I have 42 我希望输出为 我有 42 美元 我怎样才能做到这一点 谢谢 飞镖弦
  • Java:删除链表中的所有元素

    Java中如何删除链表中的所有元素without使用已经可用的clear 方法 这项练习的灵感来自于电话采访中收到的一个问题 说我可以用 C 来做这个 void DeleteAllElement ListElement head ListE
  • 用于分享帖子的 Yammers REST API

    我想使用 REST API 从我的业务应用程序共享帖子 不是发布新消息 而是共享现有帖子 有谁知道要使用哪个端点以及如何实现它 当您使用 Yammer API 创建新帖子时 请将参数 shared message id 与要共享的消息的 m
  • 为什么 justify-content 不以我的 div 为中心?

    我试图将两个 div 水平居中放在爸爸 div 内 爸爸 div 设置为flex direction column因为我希望子 div 一个在另一个之下 但位于页面的中心 justify content center 应该做但不起作用 我终
  • 如何注释 .tsx 文件中的属性?

    给出以下 JSX 代码 div div 我怎样才能注释掉className my class className my class 不起作用 className my class 不起作用 TS1005 expected className
  • 如何在Azure数据工厂中传递不记名令牌API

    我有一个 API 它具有授权和不记名令牌 我在邮递员中进行了测试 它正在工作 但是 当我在 ADF 中使用 Web 活动时 它不起作用 我在 URL 部分传递 url 创建新标头 输入授权并指定值 Bearer token 出现以下错误 E
  • 有没有办法找到哪些 .NET 类实现了某个接口?

    例如 如果我想查看我的 NET 选项用于实现 IList 或 IDictionary 有没有办法找到它 例如在 MSDN 文档中 我认为可以使用反射器 http www red gate com products reflector
  • 玩笑测试因 refs 和 Form 失败

    我有一个搜索栏组件 如下所示 render const onChangeTextInput this props return
  • 如何在 TargetFrameworks 标记中每个框架运行一次的目标之前创建仅运行一次而不是一次的 MSBuild 目标?

    我有一个我部分拥有的代码生成器工具 现在 csproj 文件可以在其中列出多个目标框架并构建所有这些框架 我试图弄清楚如何使 MSBuild 目标仅在每个目标中生成一次代码无论列出了多少个目标框架 都将运行构建 并让每个目标框架的编译等待代