我将一个文件vbaProject.bin
复制到我的VS.net项目的根目录中(我希望它高度可见,而不是在子文件夹中)。我选择了它并将Build Action设置为Embedded Resource。然后我在我的代码中这样做了......
App = System.Reflection.Assembly.GetExecutingAssembly()
Ans = App.GetManifestResourceStream("vbaProject.bin")
Ans总是没有。 GetManifestResourceStream
对我来说有点黑盒子,如果在“root”中找到这个资源可以吗?如果是这样,我的名字是否正确,或者我需要某种路径吗?
更新:根据迈克尔的建议,我这样做了:
App = System.Reflection.Assembly.GetExecutingAssembly()
Ans = App.GetManifestResourceStream(App.GetName().ToString().Split(","c)(0) & ".vbaProject.bin")
这是一个安全的解决方案吗?
答案 0 :(得分:1)
如果您希望依赖Visual Studio的行为,那么您可以执行以下操作:
Dim asm As Assembly = Assembly.GetExecutingAssembly
Dim firstType As Type = asm.GetTypes(0)
Dim rootNamespace As String = firstType.Namespace
Dim myFileName As String = "something.bin"
Dim strm As IO.Stream = asm.GetManifestResourceStream(rootNamespace & "." & myFileName)
这依赖于Visual Studio的行为,以便将根命名空间预先挂起到嵌入文件的名称。
更好的解决方案是修改ProjectName.vbproj
文件(MS Build文件)以指定要使用的确切名称。您应该找到一个<ItemGroup>
,其中包含嵌入文件的指令。
<ItemGroup>
<EmbeddedResource Include="DirectoryPath\something.bin" />
</ItemGroup>
更改上述内容以指定将提供要使用的名称的LogicalName标记。
<ItemGroup>
<EmbeddedResource Include="DirectoryPath\something.bin">
<LogicalName>something.bin</LogicalName>
</EmbeddedResource>
</ItemGroup>
关闭Visual Studio并在文本编辑器中编辑ProjectName.vbproj
。在Visual Studio中加载项目时,将保留此更改。
通过此更改,现在您可以获得如下的流:
Dim myFileName As String = "something.bin"
Dim strm As IO.Stream = asm.GetManifestResourceStream(myFileName)