【问题标题】:Modify C# Code BEFORE Compile in VS 2012在 VS 2012 中编译之前修改 C# 代码
【发布时间】:2013-06-14 05:45:40
【问题描述】:

我有一个类似的问题,比如这里的问题:Create MSBuild custom task to modify C# code *before* compile

我需要在编译前更改 .cs 文件。当然,由于版本控制,我不希望它们就地改变。我已经发现,自定义 MSBuild 任务可能是完成这项工作的正确选择。

引用上述问题的答案:

创建自定义任务,接受 cs 文件列表以在编译之前进行调整

  • 自定义任务调整接收到的文件列表并在磁盘上创建它们
  • 自定义任务在输出参数上设置更改文件列表
  • 任务的输出会替换原来的cs文件列表
  • 针对更改的文件进行编译。

解决方案看起来很清晰很好,但我找不到(全部适用于 Visual Studio 2012):

  • 该任务应该获得什么目标? BeforeCompile 还是为时已晚?
  • 我怎样才能将“编译文件”作为参数提供给任务?它是如何定义的?
  • 如何准确定义输出以便编译使用修改后的文件?

谢谢,如果有人能帮我举个例子就好了:-)

【问题讨论】:

  • 编写一个 msbuild 脚本来获取文件、修改它们、使用新文件从模板创建一个 vcproj 然后构建它不是更简单的工作流程吗?
  • 这可能是一种简单的方法,只需将文件复制到某处作为备份并在控制台预构建步骤中转换所有源文件。然后在常规构建之后,通过构建后步骤,恢复之前保存的源文件。但这感觉不是很优雅;)

标签: c# visual-studio-2012 msbuild


【解决方案1】:

我的一个客户要求我在编译之前替换一些 AssemblyInfo.cs 文件中的一些版本和版权信息。我正在通过 FileUpdate 任务执行此操作,并使用正则表达式。这当然会导致修改文件。但这完全没有问题,只需使用 Exec 任务并在构建作业结束时运行“svn revert”即可:

    <Target Name="RevertModifications">
    <Message Text="reverting modifications..." />
    <Exec Command="svn revert -R $(RootDir)"/>
</Target>

也许这会有所帮助?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 2022-01-09
    • 2014-04-27
    • 1970-01-01
    • 2014-12-22
    相关资源
    最近更新 更多