Ele*_*ios 5 c# vb.net resx visual-studio winforms
我正在从代码生成/构建自定义.Net托管资源文件(.resx文件)
在C#或VB.Net中,我如何设计一个能够将我的自定义.resx文件合并,加入或嵌入到.net程序集中的方法(或多或少与VS编译器默认使用的方式相同)?
所以,一方面我有一个Application.exe(已编译),另一方面我有一个resources.resx,我的意图是将resx"合并"到已编译的程序集中.
任何形式的信息都会感激不尽,因为我没有发现任何相关信息.
PS:唯一的必要条件是不使用ILMerge等第三方工具.
我最终通过一种不同的方法解决了这个问题,在创建 ResX 文件后,我所做的就是在运行时编译 .net 程序集,并将该 ResX 文件指定为要编译的程序集的嵌入资源,因此,结果是编译后的 .net 程序集。 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
Run Code Online (Sandbox Code Playgroud)
我从这里获得了一些帮助来做到这一点:
归档时间: |
|
查看次数: |
1488 次 |
最近记录: |