2

サーバー側のインクルードを備えた ASP.NET アプリケーションがあります。例えば:

<!--#include virtual="/scripts.inc" -->

私の Web サイトは仮想ディレクトリで開始されるため、これらのファイルは ASP.NET Web サイト プロジェクトに存在しません。

/path-to-my-application

Build Web Siteを選択すると、次のエラーが表示されます。

パス「/scripts.inc」のマッピングに失敗しました

Visual Studio は、ルート ディレクトリ レベルで定義されているこれらのインクルード ファイルを解決できません。これらは Web サイト プロジェクトでは表示されません。

#include 参照を手動でコメントアウトする以外に、Web サイトを構築する方法はありますか? これらのエラーを無視してサイトをコンパイルするように Visual Studio を強制することはできますか?

Web サイトが IIS にプッシュされると、すべての #include ファイルが配置されているため、問題はありません。

注 - Web コントロールは、このアプリケーションのオプションではありません。#include ファイルが必要であると仮定してください。また、インクルード ファイルは他のアプリケーションで使用されているため、移動できません。

4

4 に答える 4

0

インクルードファイルのコピーを作成し、それらを開発マシンのソリューションに配置してから、ビルド出力にコピーしないようにVSに指示できますか(ビルドアクション=なし)?

そうでない場合は、scripts.incファイル(http://oursite.com/scripts.inc)へのリンク全体をハードコーディングしてみませんか。厄介な回避策ですが、コンパイルエラーを無視することはできないと確信しています(ただし、警告は無視できます)。

于 2010-06-10T11:06:08.283 に答える
0

これを試して:

.aspx ファイルの SSI ディレクティブを次のように置き換えます。

<asp:Literal runat="server" id="scriptsIncLiteral" />

そして、これをコード ビハインドに入れます。

protected override void OnPreRender(EventArgs e)
{
    string scriptsFile = Request.MapPath(".") + @"..\scripts.inc";
    scriptsIncLiteral.Text = System.IO.File.OpenText(scriptsFile).ReadToEnd();
}

..\scripts.inc ファイルが 2 つ以上のディレクトリに配置されている場合は、もちろん s の数を変更する必要があります。また、ASP.NET Web アプリケーションがこのファイルにアクセスできることを確認する必要があります。そうしないと、System.UnauthorizedAccessException.

于 2010-06-05T15:10:23.943 に答える
0

~/ 構文を使用して、アプリのルートを表現してみてください。例えば

<!--#include virtual="~/scripts.inc" -->
于 2010-06-03T17:11:11.863 に答える
0

実際のビルドの前にプロジェクトがビルドされるたびに、Visual Studio でビルド前のタスクを設定して、プロジェクト ディレクトリにインクルード ファイルをコピーできます。これはハックですが。

より正しい方法は、2 つのプロジェクトでソリューションをセットアップすることです。1 つは、Web サーバーのルート ディレクトリ/プロジェクトが (共有ファイルを含めることによって) 対話する一連のアプリケーションを表します。もう 1 つは、問題のあるプロジェクトを表します。次に、inc ファイルを最初のプロジェクトにインクルードする必要があります (ファイルとしてプロジェクトにインクルードするように)。これにより、2 番目のプロジェクトで inc ファイルが表示され、インクルードできるようになります (サーバー側の ASPX のインクルードのように)。彼ら。

これはより手間のかかる方法ですが、状況をより厳密に反映し、ハックする必要がなく、将来的にいくつかのボーナス機能を提供できます (接続されたプロジェクトのより簡単な統合/表現など)。

于 2010-06-10T08:32:45.347 に答える