如何将C#程序集资源嵌入到同一程序集中?

3
我已经在我的类库项目中添加了不同文化的资源。在构建时,为每种文化创建了单独的文件夹,并在其中放置一个程序集。
是否有一种方法可以将所有资源嵌入到类库程序集中,而不是为每种文化创建一个额外的程序集?该类库最终将用于另一个项目,因此使用这些单独的文件夹需要分发一个zip文件,而不仅仅是一个程序集。
澄清:我正在寻找一种没有安装程序或第二方工具的解决方案。相反,我希望在Visual Studio中找到一种解决方案,使结果为一个包含不同资源的程序集。

2
起初我以为这是不可能的(因为程序集使用相同的命名空间),但在快速搜索后,我遇到了这个 - Menelaos Vergis
3
你可以将程序集嵌入到一个名为“setup.exe”的程序中。不要编写自己的安装程序,有很多现成的安装程序生成工具可用,包括Visual Studio的发布选项卡。 - Hans Passant
很奇怪这个操作没有一个“简单”的方法。谢谢。 - Lieven Cardoen
1
请记住,在不同程序集中拥有不同的文化,这样Windows就可以更轻松地为用户选择适当的资源。覆盖数据决策意味着编写处理它的代码,这是可能存在漏洞的入口点。如上所述,最好的选择是使用像NSIS(其中包括一些不错的IDE,如HMNE)或ClickOnce这样的工具,这些工具会为您处理这些工作。更少的工作和更少的风险。 - John C
2
问题应该澄清一下。据我理解,重点不是制作安装程序或类似的东西。相反,楼主希望最终得到一个具有多语言功能的单个dll文件。类似于这个问题或者这个问题,只是针对DLL而不是EXE文件。 - Andreas
1个回答

2
要将多个程序集合并为一个,您可以使用Fody/Costura。它允许您将多个程序集合并到一个项目中。在主项目中添加它(可以通过NuGet完成)。接下来,在weavers.xml文件中(该文件将自动生成),只需添加以下文本:
<Costura>
    <IncludeAssemblies>
        Project.MyData.Dutch
        Project.MyData.French
        Project.MyData.English
    </IncludeAssemblies>
</Costura>

(应该与引用名称相同,因此不包括.dll后缀)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接