如何在预生成事件中将源文件 (.cs) 添加到资源 (.resx)

本文关键字:添加 cs resx 资源 源文件 事件 | 更新日期: 2023-09-27 18:32:18

这很简单,甚至可能吗?

原因:按照我的另一个问题并使用这种方法,现在我想简单地将源文件嵌入到资源中,以便我可以在应用程序运行时将其复制到临时文件夹 - 并将应用程序保留为单个文件。

我认为使用预构建事件是执行此操作的最佳方法。如果是这样,将如何做?

编辑:我询问在构建之前添加它,因为我还假设如果我手动添加一次然后在之后更改代码,它不会自动更新。

如何在预生成事件中将源文件 (.cs) 添加到资源 (.resx)

我最近在为 .NET 控件开发示例套件时遇到了同样的问题,该控件必须在应用程序中显示自己的示例源代码。

我最终得到的方法如下。

  1. 我创建了一个批处理脚本(在预构建中运行),以将/Examples/* 下的所有代码文件复制到解决方案资源/示例Src/* 中的另一个文件夹

  2. 然后,我将所有这些文件包含在csproj中的Resources/ExamplesSrc/*下并保存了它。

  3. 下一步是我将 Resources/ExamplesSrc/* 下的所有文件设置为嵌入式资源,并将更改提交到 SVN。我没有将示例(生成)提交到 SVN,只是将修改后的 csproj 和批处理文件提交。

开发人员签出时的效果是,他们在所有资源上都有(!)图标(它们不在磁盘上,但csproj正在寻找它们),但是一旦他们构建了生成的文件,就会出现并且一切都很好。此方法也适用于生成服务器(团队城市),示例套件现在可以通过嵌入式资源加载和浏览自己的代码。

您应该注意的一个警告。VS2010中有一个怪癖(显然是设计使然)。如果嵌入的资源中包含".cs"(即任何代码文件!),则无法使用Assembly.GetManifestResourceStream()从程序集加载它。为了解决此问题,所有源文件都在批量复制步骤中从 * 重命名。Xaml.cs 到 *。Xaml.c.txt,从 *.cs 到 *.c.txt

希望这有帮助!

事实证明,

我不需要在每次构建解决方案时(重新)添加源文件!

当我手动添加它成为资源上的"文本"文件时 - 我可以使用Properties.Resources.SourceCode轻松地将其作为字符串访问(文件名为"SourceCode.cs")。是的,由于资源属性"持久性":文件在编译时链接,它会自动更新。