【问题标题】:How to add source file (.cs) to resources (.resx) in a pre-build event?如何在预构建事件中将源文件 (.cs) 添加到资源 (.resx)?
【发布时间】:2012-05-06 08:12:41
【问题描述】:

这很简单,甚至可能吗?

为什么:按照我的other question 并使用this approach,现在我想简单地将源文件嵌入到资源中,以便在应用程序运行时将其复制到临时文件夹- 并将应用程序保存为单个文件。

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

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

【问题讨论】:

    标签: c# visual-studio embedded-resource pre-build-event


    【解决方案1】:

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

    我最终采用的方法如下。

    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

    希望这会有所帮助!

    【讨论】:

    • 哦,我没有使用版本控制,它只是一个小型的学习/培训应用程序,但我希望将其发送给我的大学教授和同学,所以准备好代码是一个加号。不过感谢您的建议!
    • 那么您需要注意,如果您的批处理文件出错,它将破坏您的源文件。确保在执行此操作之前进行备份!
    【解决方案2】:

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

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

    【讨论】:

    • @Dr.AndrewBurnett-Thompson 是的,它运行良好。我什至尝试使用一个空的 .cs 文件,然后在创建资源引用后开始在其中编码。每次运行时,代码都在那里。当然,您只需要保存代码文件即可。
    • 好吧,让我直说吧,您在 Project/* 下有一个代码文件,并且您将相同的源文件添加到 resx 资源,然后可以作为字符串访问吗?极好的。我可能会转换使用批处理文件的代码:) BTW Mine 是silverlight,所以那里可能存在问题但值得一试。感谢您分享您的最新答案
    • @Dr.AndrewBurnett-Thompson 这正是我所做的:只是将现有的 *.cs 文件(在我的项目文件夹下)添加到资源中。试一试,虽然我不确定它是否适用于 Silverlight 项目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多