msbuild 中动态生成的 C# 文件的问题

Posted

技术标签:

【中文标题】msbuild 中动态生成的 C# 文件的问题【英文标题】:Problem with dynamically generated C# files in msbuild 【发布时间】:2008-11-03 18:00:31 【问题描述】:

我有一个源 XML 文件,用于创建 C# 文件,然后将其编译为项目的一部分。 目前我有一个 BeforeBuild 目标,它运行我的 XML 到 C# 转换器。 问题是,在运行 BeforeBuild 步骤时,旧文件似乎已被构建系统存储,因此新文件被忽略了。

我该如何解决这个问题? Transforms 似乎是一种方式,但它们的功能有限。

【问题讨论】:

【参考方案1】:

我猜您的“由构建系统存储”可以翻译为包含您希望编译的 .cs 文件的 ItemGroup 是在读取 msbuild 文件时生成的,而不是在执行编译目标时生成的。您有多种选择:

    <CreateItem> 见CreateItem task <Output> 见Output element

我希望这会有所帮助。

【讨论】:

【参考方案2】:

好吧,我们这里有一些类似的东西。我们使用 .tt 从 xml 文件中生成 .cs。这两个文件都是特定 csproj 的一部分。在 csproj 上运行 properties->BuildEvents 在 Pre-build event 命令行中给出了这个小 sn-p:

del "$(ProjectDir)MyCsFile.cs"
copy /b /y "$(ProjectDir)\MyXmlFile.xml" "$(TargetDir)"
"$(ProjectDir)tt.bat" "$(ProjectDir)MyTemplateFile.tt"

不知道这对你有没有用,我希望它可以作为最后的解决方法。

【讨论】:

【参考方案3】:

我认为您需要向我们展示一些您的规则/构建文件。您应该有一个以 xml 作为依赖项的 cs 文件的规则/依赖项。

我不确定您所说的“由构建系统存储”是什么意思

仔细检查您的规则是否有错误/遗漏。

【讨论】:

以上是关于msbuild 中动态生成的 C# 文件的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 和 Linq 动态生成 kml 文件 [重复]

在运行时动态生成 DLL 程序集

C#如何实现动态添加右键菜单

在 C# 中播放动态创建的简单声音,无需外部库

如何用C#动态编译

使用 C# 在 html 文档中抓取由 JavaScript 动态生成的数据