在运行时合并ResX文件?

ElektroStudios

我正在从代码生成/构建自定义.Net托管资源文件(.resx文件)

C#VB.Net中,我如何设计一种能够将我的自定义.resx文件合并,联接或嵌入到.net程序集中的方法(或多或少与VS编译器默认方式相同)?

因此,一方面,我有一个Application.exe(已编译),另一方面,我有一个resources.resx,我的意图是将resx“合并”到编译后的程序集中。

任何信息都将不胜感激,因为我对此一无所获。

PS:唯一的条件是不使用ILMerge之类的第三方工具

ElektroStudios

我最终通过一种不同的方法解决了问题,在创建ResX文件之后,我的工作是在运行时编译.net程序集,并将ResX文件指定为要编译的程序集的嵌入式资源,因此,结果是经过编译。可以合并的Net dll或任何我想要的文件,我可以随时从该dll中提取ResX文件,太好了!

如果有人知道比这更简单/容易的选择,请随时发布答案(以寻求帮助或仅用于剩余的赏金)

这是示例代码:

Imports System.CodeDom.Compiler
Imports System.IO
Imports System.Reflection

Public Class Form1

Private Sub Test() Handles MyBase.Shown

    ' Create the ResX file.
    Dim resX As New ResXManager(Path.Combine(Application.StartupPath, "C:\MyResources.resx"))
    With resX
        .Create(replace:=True)
        .AddResource(Of String)("String Resource", "Hello World!", "String Comment")
    End With

    ' Compile an assembly.dll that contains the ResX file as an embedded resource.
    Dim codeProvider As CodeDomProvider = CodeDomProvider.CreateProvider("VB") ' or New VBCodeProvider()
    Dim parameters As CompilerParameters = New CompilerParameters()
    With parameters
        .GenerateExecutable = False
        .OutputAssembly = "C:\Assembly.dll"
        .EmbeddedResources.Add("C:\MyResources.resx")
    End With
    Dim results As CompilerResults = codeProvider.CompileAssemblyFromSource(parameters, "Public class ResourceClass : End Class")

    ' Read the assembly.
    Dim assembly As Assembly = assembly.LoadFile("c:\Assembly.dll")

    ' Extract/read the ResX file from assembly.
    Dim embeddedFileName As String = "MyResources.resx"
    Dim targetFilePath As String = "C:\NewMyResources.resx"
    Using s As Stream = assembly.GetManifestResourceStream(embeddedFileName)
        Dim buffer As Byte() = New Byte(CInt(s.Length - 1)) {}
        Dim read As Integer = s.Read(buffer, 0, CInt(s.Length))
        Using fs As New FileStream(targetFilePath, FileMode.Create)
            fs.Write(buffer, 0, buffer.Length)
        End Using
    End Using

End Sub

End Class

我从这里获得了一些帮助:

在运行时动态生成DLL程序集

从程序集中读取嵌入式文件

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章