8

私は Visual Studio 2012 と MVC4 を使用しています。リンクされたファイル (別のプロジェクトから) を MVC4 アプリケーションに追加しました。ファイルのプロパティは次のとおりです。

  • ビルド アクション: コンテンツ
  • 出力ディレクトリにコピー: コピーしないでください

これが私のバンドルの例です:

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include("~/Scripts/jquery.unobtrusive*","~/Scripts/jquery.validate*","~/Scripts/FolderA/*.js"));

テストのために、空の JavaScript ファイル (temp.js) もそのフォルダーに追加しました。これはリンクされたファイルではありません。ページのソースを調べると、このファイルは表示されますが、リンクされたファイルは表示されません。このファイルに直接移動することもできません。バンドル内の他のファイルは正常に表示されます。

リンクされたファイルをバンドルできますか?

4

2 に答える 2

8

簡単な答え: デバッグ モードではいいえ、リリース モードでははい。

ファイルのリンクは、別の場所に保存されているファイルをコードとリソースのコンパイルに含めるために使用される Visual Studio の概念です。明らかに、ファイルをコンパイルする必要がある場合 (ソース ファイル)、リソースとして埋め込む必要がある場合、またはターゲット ディレクトリにコピーする必要がある場合 ([出力ディレクトリにコピー] が [コピー] に設定されている場合) は、ファイルのリンクが機能します。


デバッグモードで動作しない理由

デバッグ モードでは、バンドルは無効になり、スクリプトは個別にリンクされます。ファイルは Web アプリケーションのルートにコピーされないため、IIS を介してユーザーがアクセスすることはできません。アプリケーションをビルドするたびにスクリプト ファイルのコピーを有効にしようとすると、ファイルがbinWeb アプリケーションのディレクトリにコピーされます。このディレクトリは IIS 経由ではアクセスできず、これも機能しません。


リリースモードで動作する理由

リリースモードでは、スクリプトのバンドルが実行されます。スクリプト ファイルは Web ページから個別にリンクされていないため、ユーザーが直接アクセスする必要はありません。バンドル コードのみがアクセスできる必要があります。ただし、これを構成することについては、こっそりと行う必要があります。必要がある:

  • Copy to Output DirectoryにリンクされたスクリプトのセットCopy always。リンクされたスクリプトを ~/Scripts に保存すると、アプリケーションをコンパイルすると ~/bin/Scripts フォルダーにコピーされます。
  • ディレクトリを含めるようにバンドル パスを構成しますbin

~/bin/Scripts/次の行に注意してください。

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include("~/Scripts/jquery.unobtrusive*","~/Scripts/jquery.validate*","~/bin/Scripts/FolderA/*.js"));

デバッグモードの無効化

ここで言及されているデバッグ モードは、Visual Studio のコンパイラ設定ではありません。これはweb.configファイル内の要素です。

<system.web>
    <compilation debug="false" targetFramework="4.5" />
于 2013-07-23T16:21:32.537 に答える
6

リンクされたファイルをバンドルして機能させるために私が見つけた最も簡単な解決策は、すべてのビルドの前にリンクされたコンテンツ ファイルを正しい場所に自動的にコピーする MSBuild ターゲットを追加することです。

[project].csproj以下をファイルに追加するだけです。

<!-- Copy linked content files to their location on build. -->
<Target Name="CopyLinkedContentFiles" BeforeTargets="Build">
  <Copy SourceFiles="%(Content.Identity)" DestinationFiles="%(Content.Link)" SkipUnchangedFiles="true" OverwriteReadOnlyFiles="true" Condition="'%(Content.Link)' != ''" />
</Target>

これにより、Angular JavaScript ファイル、Bootstrap CSS ファイルなどを、ソース管理にコミットしたり、バンドルを解除したりすることなく、NuGet パッケージからリンクできます。

于 2016-08-29T13:14:24.413 に答える