Merge WPF App with C# and VB.NET code
我有一个用
问题:它必须在一个文件中发布,不能拆分为不同的程序集!但是:这是一个
我能做什么?是否可以在飞行中生成(执行)IL?
有关将wpf exe和库dll合并在一起的信息,请参见以下问题(以及各种答案):使用wpf将dll合并为单个.exe
请参阅此答案,了解异常过滤器的C版本(可能不适用于您的情况,请保存在此处以备将来参考):比多个catch块更优雅的异常处理?
您可以有一个程序集,但使用不同语言编译的多个模块。您将设置三个项目:
- VB.NET特定代码项目
- 代码项目
- EXE项目
现在,您不能使用Visual Studio来构建它(afaik,但您可能可以处理项目文件/msbuild任务来实现此目的),但您可以使用命令行编译器来创建netmodules。
使用csc.exe(对于c),您将使用
然后,在构建您的exe项目时,您将使用命令行编译器(取决于语言),并使用
您还可以选择将所有内容编译成模块,并使用程序集链接器(al.exe)生成输出程序集。
如果上面的选项不吸引你,那么另一个选项是选择一种语言并使用它。
如果您使用vb.net,那么您将拥有异常过滤器(您指出的是所需的部分,这是一个语言特性,而不是通过框架公开)。
如果您使用C,您没有异常过滤器,但是您可以按照George Duckett的答案模拟它们。
我建议您在构建期间仍然创建两个程序集,但随后将一个程序集作为资源嵌入另一个程序集。通过这种方式,可以调用assembly.load()并加载辅助程序集。
1 2 3 4 5 6 7 | using (var stream = Assembly.GetExecutingAssembly(). GetManifestResourceStream(resourceName)) { Byte[] assemblyData = new Byte[stream.Length]; stream.Read(assemblyData, 0, assemblyData.Length); return Assembly.Load(assemblyData); } |
有关详细信息,请参阅http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx。