17

私はかなり標準的でシンプルなMVC4Webサイトを持っています。

ルートディレクトリには、bin、content、scripts、viewsがあります。デフォルト設定を使用して、プロジェクトのDLLを「web.dll」と呼び、必要なすべての追加機能をbinディレクトリに配置します。

どういうわけか、ASP.NET開発サーバーとIIS7.5はどちらも、サイトをホストするときにbinフォルダーで「web.dll」を探すことを知っており、そこにない場合は、「タイプ'CVD.Web.MvcApplicationを読み込めませんでした」というエラーをスローします。 '"。そのエラーの標準的な解決策は、binフォルダーに直接ビルドすることですが、これは私にとっては機能しません...

デバッグの目的で、デバッグとリリースの構成をそれぞれbin/Debugとbin/Releaseに組み込み、両方のdirを展開してから、IIS、web.config、global.asax、またはのいずれかで設定を変更できるようにしたいと思います。サーバーがデバッグビルドとリリースビルドのどちらをロードして実行するかを選択する他の場所。

それが可能かどうか、または.net webappsに、すべてのコードがbinディレクトリに存在する必要があるという愚かなハードコードされたルールがあるかどうかを見つけることができませんでした。

4

3 に答える 3

11

わかりました。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、bin dir (つまりprivatePath="debug") に対して相対的に指定することをお勧めしますが、私の場合は、アプリのルート (つまり上記のように) に対して相対的である必要がありました。おそらく、.net4 の変更か、その他の構成設定の変更によるものではないでしょうか。誰かがより良いアイデアを持っている場合は、自由に編集/コメントしてください。

この段階で、サーバーがファイルを見つけて、アセンブリとクラスを正常にロードすると、不足しているすべての参照ファイルについて不平を言い始めます。次のように追加する必要がありました<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

于 2012-11-07T06:01:46.400 に答える
5

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

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

このようにして、出力パスを別の場所に設定できます。ソース ツリーの完全な外部であっても構いません。

IISExpress は引き続きソース ツリーのプロジェクト フォルダーから実行されますが、ビルドされた DLL を見つけるために bin ジャンクションに従います。他のファイルはソース ツリーの場所から使用されることに注意してください。

ビルド構成を切り替える場合に備えて、ジャンクションは毎回削除され、再作成されます。

bin ディレクトリが古いビルド セットアップからまだ存在していないことを確認してください。(実際の) bin ディレクトリにファイルがある場合、rmdir は機能しません。

于 2017-01-10T05:01:15.573 に答える