4

プロジェクトディレクトリ(ソリューションではない)にある「クエリ」フォルダーの下に、Visual Studioプロジェクト内に3つの特に大きなSQLクエリを配置しました。これらのファイルにアクセスする雄弁な方法はありますか? 私は何か@"Queries/firstSqlQuery.sqlがうまくいくことを望んでいました。

のようにフル パスを指定する@"C:\\Users\John\Documents\VisualStudio2010\Projects\MySolution\MyProject\Queries\firstSqlQuery.sql ことは、アプリケーションが移動した場合にコードに戻ってパスを修正する必要があるため、実際にはやりたくないことです。

編集: 何らかの理由で、ページは のファイルを探していますC:\\Program Files(x86)\Common Files\Microsoft Shared\DevServer\Queries\firstSqlQuery.sql。実行可能ディレクトリが異なるのに、なぜこの場所を探しているのですか?

4

3 に答える 3

3

このようなことができます...プロジェクト外の場合。(最初にこれを読んだとき--読み間違えて、プロジェクトが含まれていると想定していたソリューションディレクトリにあると思いました)--

var pathToBin = Assembly.GetExecutingAssembly().Location;
var directoryInfoOfBin = new DirectoryInfo(pathToBin);
var solutionDirectory = directory.Parent().Parent();
var pathToSolution = solutionDirectory.FullName;

しかし、プロジェクト内にある場合、これははるかに簡単です

System.Web.HttpContext.Current.Server.MapPath("~/Queries/firstSqlQuery");
于 2013-06-07T12:42:45.937 に答える
2

これを処理する方法はいくつかありますが、最初に収集しなければならない基本的な理解があります。isn't のようなものを発行して@"Queries/..."も、それ自体では何も起こりません。System.IO名前空間を利用して IO 操作を実行する必要があります。

基礎のその部分で、次のようなコマンドを発行するときに、もう少し敷設しましょう。

File.ReadAllText("firstSqlQuery.sql");

暗示されるパスはWorking Directory、コードを実行しているアセンブリのパスです。Visual Studio でアプリケーション、特に ASP.NET アプリケーションをデバッグする場合、既定binではプロジェクト ディレクトリの下にあるディレクトリになります。したがって、フォルダーにアクセスしたい場合は、次のようにする必要があります。Queries

File.ReadAllText(@"..\Queries\firstSqlQuery.sql");

だから、それはそれを処理する1つの方法です。

binそれを処理する別の方法は、プロジェクトがビルドされるたびにファイルのプロパティを確認してファイルをフォルダーにコピーすることです (例: create a Post Build Event)。

繰り返しますが、ここで重要なのは、開始しているディレクトリを理解することです。

最後に、注目すべき点として、ディレクトリ構造を利用する場合は、Queriesフォルダがライブ サイトに展開されるようにする必要があります。言うまでもないことかもしれませんが、以前にもまさにその問題に遭遇した人を見たことがあります。

于 2013-06-07T12:43:48.913 に答える
0

パスを設定しなくても、ビルドを実行してそこからファイルを読み取るときに、クエリ ファイルが出力ディレクトリにコピーされていることを確認できます。

于 2013-06-07T12:44:02.573 に答える