2012-11-07 9 views
14

私はかなり標準的でシンプルなMVC4ウェブサイトを持っています。.net mvc binディレクトリを変更する方法はありますか?

ルートディレクトリには、bin、content、scripts、viewsがあります。プロジェクトのDLLのデフォルト設定を使用して、 "web.dll"と呼んで、必要なすべてのエキストラをbinディレクトリに入れてみましょう。

どうやら、ASP.NET devサーバーとIIS7.5は両方ともサイトをホストするときにbinフォルダー内の "web.dll"を探すことを知っており、そこになければエラーをスローします: "タイプを読み込めませんでした" .Web.MvcApplication '"そのエラーの標準的な解決策は私のためにはうまくいかないbinフォルダに直接ビルドすることです...

デバッグの目的で、私はデバッグを構築することができます&設定をbin/Debugとbin/Releaseをそれぞれ実行してから、両方のディレクトリを展開してから、IIS、web.config、global.asaxなどの設定を変更して、DebugまたはReleaseビルドをサーバーでロードして実行する必要があるかどうかを選択します。

これが可能かどうか、または.net webappsには、すべてのコードがbinディレクトリになければならないという愚かなハードコーディングルールがあるかどうかを確認できませんでした。

ソリューションエクスプローラで

答えて

10

OKだから、Sen Jacobといくつかのより多くのリサーチによって提供されるいくつかのリンクの助けを借りて、私はweb.configを使ってすべてを行うことが可能であることを理解しました。

我々は新しいパスを提供し、私たちは離れてデフォルトから操縦しているため、アセンブリ名を伝えるために必要なすべてのファースト:今すぐ

<configuration> 
    <system.web> 
     <compilation debug="true" targetFramework="4.0"> 
      <assemblies> 
       <add assembly="Something.Web" /> 
      </assemblies>   
     </compilation> 
    </system.web> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <probing privatePath="bin\debug" /> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

、他のどこでも人々はビンディレクトリにprivatePath相対指定示唆何らかの理由(すなわちprivatePath="debug")、私の場合はアプリケーションのルート(つまり上記のように)に相対的でなければなりませんでした。たぶんそれはネット4や他の設定の変更だと思います。誰かがより良いアイデアを持っていれば、自由に編集/コメントすることができます。この段階で

、サーバがファイルを見つけ、そして成功し、それは私が<add assembly="Something.Web" />の右隣を追加する必要がありました不足しているすべての参照ファイル、文句を開始しますアセンブリおよびクラスをロードした場合:

<assemblies> 
     <add assembly="Something.Web" /> 
     <add assembly="System.Web.Mvc" /> 
     <add assembly="System.Web.Optimization" /> 
     <add assembly="System.Web.Helpers" /> 
     <add assembly="System.Web.WebPages" /> 
    </assemblies> 

私が集めたことから、サイトの起動時にアセンブリが再コンパイルされます(わからない)。

出典: 1 2 3

+0

privatePathで指定されたディレクトリは、アプリケーションベースディレクトリのサブディレクトリである必要があります(http://msdn.microsoft.com/en-us/library/4191fzwb%28v=vs.110%29.aspx) – r03

-2

、右あなたが設定を変更することができます。..

enter image description here

をプロパティ

テイクビルド]タブ> [プロジェクトをクリックし、あなたがそれを好きな場所にbinに/からの出力パスを変更上のコンボボックスからDebug/Releaseに移動し、それぞれの出力パスを個別に設定します。

+3

これは、ファイルをフォルダに入れるだけで、そこにDLLがあることをサーバーに指示しません。私が探しているのは、ファイルがデフォルトの場所にないことをサーバーに知らせる方法です。 –

+2

これはあなたが探しているものですか? [Binではなく、別のディレクトリからdllをロードするようにIISに指示しますか? web.config?](http://forums.asp.net/t/1303052.aspx) –

+0

ありがとう、そこに提案されている修正があるかどうか確認してください –

0

私は同じ問題がありました。それを解決するために、私は、ビルド後のイベントでターゲットディレクトリへの「bin」と呼ばれるディレクトリジャンクションを作成しました:

if exist "$(ProjectDir)bin" rmdir "$(ProjectDir)bin" 
mklink /J "$(ProjectDir)bin" "$(TargetDir)" 

あなたも完全にソースツリーの外に、どこか別の場所にあなたの出力パスを設定することができますこの方法を。

IISExpressは依然としてソースツリーのプロジェクトフォルダから実行されますが、ビンジャンクションの後にはビルドされたDLLがあります。他のファイルは、ソースツリーの場所から使用されることに注意してください。

ビルド構成を切り替えた場合は、その都度ジャンクションが削除され、再作成されます。

古いビルド設定からbinディレクトリが存在しないことを確認してください。本当のbinディレクトリにファイルがある場合、rmdirは機能しません。

関連する問題