9

私は.Net WinFormsを書いていて、DEBUGとRELEASEの構成を絶えず切り替えており、アクセスできるようにするためにどちらかの構成が必要なファイルがいくつかあります。

私が考えていたのは、ファイルを BIN フォルダーの共通ディレクトリに配置して、次のようにすることでした。

MyProject/Bin/CommonFiles
MyProject/Bin/Debug
MyProject/Bin/Release

そして、次の行に沿って何かを使用してファイルにアクセスすることを考えていました:

System.IO.Directory.GetParent(System.IO.Directory.GetCurrentDirectory).FullName

私の質問は、私が読んだことSystem.IO.Directory.GetCurrentDirectoryから、たとえば開いているファイルダイアログボックスでユーザーが新しい現在のディレクトリを選択したために変更される可能性があるため、これが危険かどうかです。

むしろ、次のようなものを使用する必要があります。

System.IO.Directory.GetParent(Environment.CurrentDirectory).FullName

または、フォルダーに移動するためのさらに良い方法がある/Binので、そこから移動するか、一般的に受け入れられている方法/プログラムが通常到達する必要があるファイルを保存する場所と、それをより簡単に参照する方法があります(おそらく、任意のWinForms だけでなく、種類のアプリ)?

4

5 に答える 5

5

ほとんどの答えは実際にはうまくいくように見えましたが、上記の Joe によって提供された解決策は、かなりの調整の後、私の状況に最適な解決策であることが証明されました。


まず、私が行った最終的な解決策:

  • ディレクトリを作成しましたCommon Files(私の場合、ディレクトリと同じレベルですBinが、それは必要ではありません。後で配置するコードがどのように機能するかを説明するだけです)
  • 私の.vbproj(または「、csproj」)ファイルを編集して、そのディレクトリ(サブディレクトリを含む)内のすべてのファイルをプロジェクトの追加リソースファイルとして設定しました
  • .vbprojビルド時にこれらすべてのリソース ファイルを bin\Debug または bin\Release ディレクトリにコピーするように、ファイルに 2 回目の編集を加えました。

第二に、私がこれを行うことをどのように学んだか:


最後に、私の解決策:

  • project.vbproj ファイルを開きました
  • 行のに、次のよう<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />に 1 つの新しい外観を追加しました。ItemGroup

<ItemGroup> <CommonFiles Include="Common Files\**" /> </ItemGroup>

これにより、すべてのファイル (すべてのサブフォルダーを含む) が読み込まれ、ビルド アクションが表示されます。CommonFiles

  • 行の<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />に、次の行を追加しました。

    <PropertyGroup> <PrepareForRunDependsOn>$(PrepareForRunDependsOn);CopyCommonFiles</PrepareForRunDependsOn> </PropertyGroup>

<Target Name="CopyCommonFiles"> <Copy SourceFiles="@(CommonFiles)" DestinationFolder="$(OutDir)\%(RecursiveDir)" SkipUnchangedFiles="true"/> </Target>

CommonFilesこれにより、ビルド時にファイルがビルド アクションから bin\Debug / bin\Release ディレクトリにコピーされます。

そして、それが私がそれをやった方法です....

コメント/考えは本当に大歓迎です)もし私が別の方法や何か他の方法を使うべきだったと思うなら)...

これ

于 2013-11-14T22:05:39.967 に答える
5

私は次のようにします:

  • プロジェクト内のファイル用のサブフォルダー (「CommonFiles」など) を作成します。

  • 構成ファイルをこのフォルダーに配置します。プロパティを次のように設定します。

    • ビルド アクション = コンテンツ

    • 出力ディレクトリにコピー = 常にコピー (または多分: 新しい場合はコピー)

  • ファイルは、アプリケーションがビルドされるたびに bin\Debug\CommonFiles または bin\Release\CommonFiles にコピーされます。次のように参照できます。

    Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "CommonFiles\MyFile.Dat");
    
于 2013-11-14T15:39:15.690 に答える