【问题标题】:How can I embed C# assembly resources in the same assembly?如何在同一个程序集中嵌入 C# 程序集资源?
【发布时间】:2014-05-04 23:21:53
【问题描述】:

我在我的类库项目中添加了针对不同文化的资源。构建时,会为每种文化创建单独的文件夹,每个文件夹中都有一个程序集。

有没有办法将所有资源嵌入到类库程序集中,而不是为每种文化创建一个额外的程序集?类库最终会在另一个项目中使用,因此使用这些单独的文件夹,它需要分发一个 zip 文件而不是一个程序集。

澄清:我一直在寻找没有安装程序或第二方工具的解决方案。相反,我希望在 Visual Studio 中有一个解决方案,其结果将是一个包含不同资源的程序集。

【问题讨论】:

  • 起初我认为这是不可能的(因为程序集使用相同的命名空间)但在快速搜索后我遇到了this
  • 您将程序集嵌入到名为 setup.exe 的程序中。不要编写自己的安装程序,有无数的安装程序构建器工具随时可用。包括 Visual Studio 的发布选项卡。
  • 奇怪的是,没有“简单”的方法可以做到这一点。谢谢。
  • 请记住,在不同的程序集中具有不同的区域性可以让 Windows 更轻松地为用户选择合适的资源。覆盖数据决策意味着编写代码来处理它,这可能是错误的入口点。如前所述,最好的办法是使用类似NSIS(有一些像样的IDE,如HMNE)或ClickOnce,它会为您处理工作。更少的工作和更少的风险。
  • 这个问题应该澄清。据我了解,重点不是制作安装程序或类似的东西。相反,OP 希望最终得到一个具有多语言功能的 dll。类似于 this questionthis one,除了 DLL 不是 EXE。

标签: c# .net resx


【解决方案1】:

要将多个程序集合并为一个,您可以使用Fody/Costura。 它允许您将多个程序集合并到一个项目中。 在您的主项目中添加它(可以通过 nuget 完成)。 然后只需在 weavers.xml (将自动生成的文件添加这些文本:

<Costura>
    <IncludeAssemblies>
        Project.MyData.Dutch
        Project.MyData.French
        Project.MyData.English
    </IncludeAssemblies>
</Costura>

(它应该与引用同名,所以没有.dll后缀)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 2011-10-17
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多