gpt4 book ai didi

vb.net - 根据嵌入 VB.NET 资源的路径自动添加命名空间

转载 作者:行者123 更新时间:2023-12-04 12:48:36 24 4
gpt4 key购买 nike

我习惯于在 C# 中嵌入资源,我喜欢它自动向嵌入资源添加命名空间的方式。这让我可以做这样的事情:

files\version1\config.xml
files\version2\config.xml
files\version2\config.xml

不幸的是,如果您在 VB.NET 项目中尝试相同的操作,您将收到编译错误,因为它试图将所有嵌入的资源放入根命名空间。为了解决这个问题,我可以手动编辑 .vbproj文件像这样:
<EmbeddedResource Include="files\version1\config.xml">
<LogicalName>$(RootNamespace).files.version1.config.xml</LogicalName>
</EmbeddedResource>
<EmbeddedResource Include="files\version2\config.xml">
<LogicalName>$(RootNamespace).files.version2.config.xml</LogicalName>
</EmbeddedResource>
<EmbeddedResource Include="files\version3\config.xml">
<LogicalName>$(RootNamespace).files.version3.config.xml</LogicalName>
</EmbeddedResource>

虽然这有效,但它是手动的,耗时且容易出错,所以我的问题是:
可以编写构建任务或构建事件自动执行此操作吗?

最佳答案

这是默认情况下 Visual Basic 如何不使用文件夹路径来创建命名空间的副作用。

就个人而言,除特定情况外,您谈论的我更喜欢名称中没有所有其他文件夹路径。我希望 MS 为文件资源添加另一个属性,以允许将来专门设置命名空间,但在那之前......

不过解决方法很简单。

在 C# 中创建一个仅资源的 dll 并从那里读取您的资源 .作为一名 VB 开发人员,我不会三思而后行,以满足特定目的。

编辑 .
或者...可以使用 vbs 文件作为预构建事件,以制作模拟命名空间所需的格式将文件复制到新的资源目录。

dim fSys
set fsys=createobject("Scripting.FileSystemObject")
dim root : root= "c:\temp"
dim out : out="c:\temp\DynResource"

dim rFo: set rFo=fsys.getfolder(root)
dim outPath

for each sf in rFo.SubFolders
if instr(1, sf.name, "Version")>=1 then 'valid resource folder
for each f in sf.Files
outpath = out & "\" & sf.name & "." & f.name
if fsys.FileExists(output) then
dim tf:set tf=fsys.getfile(output)
if tf.length<>f.length or tf.DateLastModified<>f.DateLastModified then
f.copy outPath,true
else
'same file, no update required.
end if
else
f.copy outPath,true
end if
next
end if
next

输出文件夹必须已经存在(显然文件夹名称中不能有“版本”)。

关于vb.net - 根据嵌入 VB.NET 资源的路径自动添加命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12860969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com