7

私は 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>

これは機能しますが、手動で時間がかかり、エラーが発生しやすいため、私の質問は次のとおりです。ビルドタスクまたはビルドイベントを作成して、これを自動的に行うことはできますか?

4

1 に答える 1

2

これは、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 

出力フォルダーは既に存在している必要があります (フォルダー名に「バージョン」を含めることはできません)。

于 2013-04-14T22:44:27.817 に答える