创建 MSBuild 自定义任务以在*编译之前*修改 C# 代码

2024-01-08

我想创建一个自定义 MSBuild 任务,在 csc.exe 编译我的 .cs 文件之前更改它们(但是,当然,这不会就地修改它们 - 我不希望触及实际的源文件)。我知道 PostSharp 和其他 .NET AOP 框架,但它们不是这个特定项目的选择,而且我想了解如何做到这一点。

我到底需要做什么才能让它发挥作用?

谢谢 理查德


鉴于您的限制,我认为您可以执行以下操作:

  1. 创建自定义任务,接受 cs 文件列表以在编译之前进行调整
  2. 自定义任务会调整收到的文件列表并在磁盘上创建它们
  3. 自定义任务在输出参数上设置已更改文件的列表
  4. 任务的输出将替换原来的cs文件列表
  5. 编译是针对更改的文件完成的。

步骤 4 确保最终编译的文件是由您的自定义任务更改的文件。

您将严重依赖任务项 http://msdn.microsoft.com/en-us/library/microsoft.build.framework.itaskitem.aspx作业的界面。

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

创建 MSBuild 自定义任务以在*编译之前*修改 C# 代码 的相关文章

  • 函数的不明确的引用/值版本

    考虑以下函数原型 void Remove SomeContainer Vec const std size t Index SomeContainer Remove SomeContainer Vec const std size t In
  • 有没有办法让我的程序用更少的代码运行?

    我为学校作业编写了以下代码 它编译并打印所有正确的消息 但出于我自己的好奇心 我想知道我的代码是否可以缩短并且仍然有效 我尝试了 signal 而不是 sigaction 但我听说 sigaction 比 signal 更受青睐 此外 此任
  • ASP.NET Core 中 AsNoTracking 的模拟或更好的解决方法

    您如何模拟 AsNoTracking 或者是否有更好的解决方法来解决此问题 Example public class MyContext MyContextBase Constructor public MyContext DbContex
  • Visual Studio 2015 C# 找不到参考

    我在使用 Visual Studio 2015 和 C 时遇到了问题 在同一解决方案中添加对其他项目的引用时 Visual Studio 找不到所有类 例如 我创建了一个单元测试项目 我添加了对我创建的通信项目的引用 库中有 10 个类 但
  • 使用 pthread_cond_signal 优雅地终止线程被证明是有问题的

    我需要发射一堆线程 并希望优雅地将它们拉下来 我正在尝试使用pthread cond signal pthread cond wait实现这一目标 但遇到了问题 这是我的代码 首先是thread main static void thrma
  • 我可以将特定警告视为错误吗?

    以下是我有时在学生代码中看到的模式的简化版本 bool foobar int a int b if a lt b return true 当然 真正的代码要复杂得多 Visual Studio 报告警告 C4715 并非所有控制路径都会返回
  • 如何实现可变虚拟成员函数

    所以我有这个功能 virtual void CallRemoteFunction const char pServerGameObjectId const char pFunctionName OVariant arg1 OVariant
  • 为什么我在这段代码中不断得到两个相同的随机值? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么我的随机数生成器在 C 中不是随机的 https stackoverflow com questions 932520 why does it appear that my random num
  • 本地主机和 request.Url.Authority

    我的应用程序通过 URL 中的公司标识符分隔用户 company1 app com company2 app com 我正在本地 PC 上进行测试 请求如下 company1 localhost com 但是 我的 request Url
  • Docker 不遵循构建目录中的符号链接

    我正在对一个应用程序进行 Docker 化 其中涉及通过 Clang 将二进制文件与其他 C 文件链接 我们维护二进制文件的符号链接版本 因为它们在整个代码库中使用 我的 Docker 构建目录包含整个代码库 包括源文件以及这些源文件的符号
  • 不可能的事情发生了!这是什么意思?

    我遇到了一个有趣的运行时错误 我认为这是某种内存泄漏 我写了以下程序 C Code include
  • 函数中的重复参数检查

    我经常有调用层次结构 因为所有方法都需要相同的参数 如果我不想将它们放在实例级别 类的成员 那么我总是问我在每个方法中检查它们的有效性是否有意义 例如 public void MethodA object o if null o throw
  • C# 或 Windows 相当于 OS X 的 Core Data?

    我迟到了 现在才开始在 OS X Cocoa 中使用 Core Data 它令人难以置信 并且确实改变了我看待事物的方式 C 或现代 Windows 框架中是否有等效的技术 即拥有可免费保存 数据管理 删除 搜索的托管数据类型 还想知道Li
  • 如何明智地解释这个编译器警告?

    当我执行这段代码时question https stackoverflow com a 51056490 2411320 我收到这个警告 warning format d expects argument of type int but a
  • 来自资源中 ImageSource 的 System.Drawing.Image

    我的问题与这个非常相似 wpf图像资源以及运行时在wpf控件中更改图像 https stackoverflow com questions 940592 wpf image resources and changing image in w
  • C++ 项目编译为静态库,编译为动态库失败(链接器错误)。为什么?

    我有一个 VS2008 本机 C 项目 我希望将其编译为 DLL 它仅引用一个外部库 log4cplus lib 并使用其功能 当然也使用 log4cplus 的 h 文件 当我尝试将我的项目编译为静态库时 它成功了 当我尝试作为 DLL
  • C# 中的快速字符串解析

    在 C 中解析字符串最快的方法是什么 目前我只是使用字符串索引 string index 并且代码运行合理 但我忍不住认为索引访问器所做的连续范围检查必须添加一些东西 所以 我想知道我应该考虑哪些技术来增强它 这些是我最初的想法 问题 使用
  • 频繁插入已排序的集合

    我已经对集合 列表 进行了排序 并且我需要始终保持其排序 我目前在我的集合上使用 List BinarySearch 然后在正确的位置插入元素 我也尝试过在每次插入后对列表进行排序 但性能不可接受 有没有一种解决方案可以提供更好的性能 也许
  • 应用非限定名称查找而不是依赖于参数的名称查找

    考虑标准 sec 3 4 1 3 中的一个示例 typedef int f namespace N struct A friend void f A operator int void g A a int i f a f is the ty
  • 清理 TPL 中的 CallContext

    根据我使用的是基于 async await 的代码还是基于 TPL 的代码 我在逻辑清理方面得到了两种不同的行为CallContext 我可以设置和清除逻辑CallContext如果我使用以下异步 等待代码 正如我所期望的 class Pr

随机推荐

  • 如何在 Node js 中访问 Laravel 环境变量?

    我试图在我的 socket io 服务器安装中访问 laravel 的 APP KEY 环境变量 但不知道如何访问任何 laravel 环境变量 任何帮助表示赞赏 检查此包中是否有 node jsdotenv https www npmjs
  • 找不到目标实体“某个实体”

    我正在使用 ZF2 与原则我收到此错误 在 Subject Entity Subject user 中找不到目标实体 Entity User 这是我的代码片段
  • 将 Maven 项目的依赖项复制到特定文件夹

    我试图在特定文件夹中获取 Maven 项目所需的所有 jar 我用过mvn dependency copy dependencies命令 它给了我里面需要的jar文件taget dependeny folder 虽然我可以使用 move 或
  • 将异常写入 Windows 日志文件

    我想捕获异常并将其记录在 Windows 日志文件中 如何打开并写入 Windows 日志 您可以使用系统 诊断 EventLog WriteEntry http msdn microsoft com en us library syste
  • 如何在OpenCV中检测已知物体?

    我尝试在窗口中实时绘制形状 屏幕上的形状如缠结 矩形 圆形 半圆形和 Z 使用黄色 尺寸和形状可能与原始图像不同 但程序知道所有原始形状 因为它们是预定义的 我想知道如何识别正确的形状 举个例子 有可能做到这一点的方法吗 我可以为此使用模板
  • 通过在 XSLT 中硬编码节点值来对节点进行分组

  • sass 的 webpack 实时热重载

    我正在为 React Starter 构建一个工作流程 并且希望在更改我的 scss 文件时自动重新加载我的浏览器 目前 当我在 index js 文件 设置为入口点 中进行更改时 webpack 将热重载 但是 当我在 scss 文件中更
  • 下载并缓存 UITableViewCell 中的图像

    注意 请勿使用图书馆 这对我来说很重要 值得学习 此外 关于这个问题有各种各样的答案 但我发现没有一个很好地解决了这个问题 请不要标记为重复 提前致谢 我遇到的问题是 如果您在表格中滚动得非常快 您会看到旧图像并闪烁 我读到的问题的解决方案
  • 将值插入到空的 multidim 中。 numpy 数组 [重复]

    这个问题在这里已经有答案了 我需要创建一个形状的空 numpy 数组 10 10 3 意味着我不知道将插入多少个元素 然后我有很多形状的 numpy 数组 1 10 10 3 我想将其一一插入到准备好的数组中 所以 标记将随着插入的元素而增
  • 相机在 Nougat 7.0 中无法工作

    我的相机代码适用于所有 Android 版本 但在 Nougat 7 0 中出现以下错误 java lang NullPointerException Attempt to invoke virtual method java lang S
  • JS获取生成的textnode的值

    我在 for 循环中有这个 Javascript renderAElements i document createElement a renderAElements i setAttribute href renderAElements
  • Pandas read_csv 中的分段错误

    我在 Os X 10 9 上安装了 Python 2 7 5 Pandas 版本为 0 12 0 943 gaef5061 当我下载时这个 train csv 文件 http www kaggle com c crowdflower wea
  • 谁能解释一下这个密码匹配指令吗?

    谁能解释一下这段代码是如何工作的 HTML 标记
  • MPI_Comm_spawn 和 MPI_Reduce

    我有两个程序 主人 产生 工作人员 执行一些计算 我希望主人从工作人员那里获取结果并存储总和 我正在尝试使用 MPI Reduce 从工作人员收集结果 工作人员使用 MPI Reduce 将结果发送给主机 MPI Comm 我不确定这是否正
  • 蓝牙无法在后台模式下扫描附近的设备 Android 11+

    我尝试在后台模式下扫描附近的蓝牙设备 但它在 Android 11 等某些设备上不起作用 这是我的示例代码 在前台工作得很好 授予所有权限
  • chrome mobile和safari mobile中的陀螺仪值不同

    我目前正在构建一个小型全景照片查看器 它可以选择使用陀螺仪导航场景 我从 deviceOrientation 事件中获取数据 并将欧拉角转换为旋转矩阵 然后对其进行一些变换 最终通过 3dMatrix 变换移动 css 立方体 我的问题是
  • Bootstrap 材料设计 CDN

    我想使用 Bootstrap Material design github 页面说我可以从jsdelivr com http www jsdelivr com bootstrap material design 但随后入门 https fe
  • 可滚动元素的顶部被隐藏[重复]

    这个问题在这里已经有答案了 我正在开发一个项目 其中包括一个带有可滚动单元格的表格 这看起来可能不是使用表格的最优雅的方式 但这正是我的用例的方法 不幸的是 我的单元格内容的顶部仍然隐藏 我无法滚动到它 这是该项目的一个非常小的样本 一个大
  • 如何将相同的元素添加到javascript数组n次

    var fruits fruits push lemon lemon lemon lemon 与其推送相同的元素 不如这样编写一次 fruits push lemon 4 times 对于基元 使用 fill var fruits new
  • 创建 MSBuild 自定义任务以在*编译之前*修改 C# 代码

    我想创建一个自定义 MSBuild 任务 在 csc exe 编译我的 cs 文件之前更改它们 但是 当然 这不会就地修改它们 我不希望触及实际的源文件 我知道 PostSharp 和其他 NET AOP 框架 但它们不是这个特定项目的选择