4

这很简单,甚至可能吗?

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

我认为使用预构建事件是最好的方法。如果是这样,它会怎么做?

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

4

2 回答 2

1

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

我最终采用的方法如下。

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

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

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

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

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

希望这可以帮助!

于 2012-04-25T15:56:16.903 回答
1

事实证明,每次构建解决方案时,我都不需要(重新)添加源文件!

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

于 2012-04-26T02:05:12.267 回答