我有一组我用它来导入几乎所有的新项目类标准的“类库”项目。
我的工作方式是创建一个空的项目,这是我的主要项目的新解决方案,然后我添加到解决方案中提到的类库项目,这样我可以看到在Soluction资源管理器这两个项目,甚至可以看到的库代码或者,如果需要更新。 然后,我写在我的主项目的代码,我编译。
这使我有2个文件,当我编译:文件* .exe和stdlib.dll
有些情况下,我用lib的,我想在一个简单,干净,为什么要重新分配非常小的工具,所以我想从我的类库项目产生的stdlib.dll嵌入到我的* .exe文件。
我敢肯定,必须有一个为什么做这在我的Microsoft Visual Basic 2010速成,但我不知道怎么办。
什么建议吗?
非常感谢先进。
下面是更多的“一步一步”版Alex的过程来嵌入组件。
- 所需的组件(stdlib.dll)添加到项目中的资源。
转到项目属性的资源选项卡,然后选择添加资源>添加现有文件... - 切换到应用程序选项卡,然后单击查看应用程序事件按钮。
该代码添加到打开的ApplicationEvents.vb的代码。
Private Sub AppStart(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf ResolveAssemblies End Sub Private Function ResolveAssemblies(sender As Object, e As System.ResolveEventArgs) As Reflection.Assembly Dim desiredAssembly = New Reflection.AssemblyName(e.Name) If desiredAssembly.Name = "the name of your assembly" Then Return Reflection.Assembly.Load(My.Resources.STDLIB) 'replace with your assembly's resource name Else Return Nothing End If End Function
现在编译你的项目,你就必须纳入输出为单个文件的依赖程序集。
请注意,有时你可以在输出文件夹中的相关组件。 这是因为VS预先配置为所有依赖程序集复制到输出路径。 您可以通过进入项目的属性的参考选项卡重写此再依赖程序集的复制本地属性设置为False。 这将被复制到输出目录停止集会。
你可以使嵌入您Assembly
通过选择“添加现有文件”,然后更改构建选项为“嵌入的ressource”(你的情况.dll文件)到项目中。
然后添加一个Handler
为AppDomain.CurrentDomain.AssemblyResolve
作为首次访问你的代码库里面它获取,一旦触发的事件。
该处理程序代码如下所示:(注意集完全限定路径包括正确namespacs我把它包在其中被调用您的应用程序的启动函数。
AddHandler AppDomain.CurrentDomain.AssemblyResolve,
Function(sender As Object, args As System.ResolveEventArgs) As System.Reflection.Assembly
Dim ressourceName = "YourNamespace.YourSubNamespace." + New AssemblyName(args.Name).Name + ".dll"
Using stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(ressourceName)
Dim assemblyData(CInt(stream.Length)) As Byte
stream.Read(assemblyData, 0, assemblyData.Length)
Return Assembly.Load(assemblyData)
End Using
End Function
然后,您可以在没有任何附加文件部署工具。