2

解決策があります。最初のプロジェクトにはエンティティ フレームワーク モデルが含まれ、出力タイプはコンソール アプリケーションです。他のプロジェクトは、最初のプロジェクトのエンティティの CRUD ビューを持つフロントエンド、asp.net mvc 5 アプリケーションです。最初のプロジェクトは 2 番目のプロジェクトから参照され、依存アセンブリも web.config に追加しました。

<dependentAssembly>
 <assemblyIdentity name="VolLoader" publicKeyToken="null" />
</dependentAssembly>

しかし、このアセンブリのエンティティを使用するビューにアクセスすると、ビューのコンパイル エラーが発生します。

Compiler Error Message: CS0246: The type or namespace name 'VolLoader' could not be found (are you missing a using directive or an assembly reference?)

Source Error:



Line 29:     
Line 30:     
Line 31:     public class _Page_Views_JobMon_Index_cshtml : System.Web.Mvc.WebViewPage<IEnumerable<VolLoader.Data.JobToWatch>> {
Line 32:         
Line 33: #line hidden

ビュー フォルダーの web.config に名前空間 () を追加すると、すべてのビューでコンパイル エラーが発生します。

アセンブリが出力にコピーされます。

しかし、最初のプロジェクトの出力タイプをクラス ライブラリに変更すると、動作し、コンパイル エラーは発生しません。私はなぜ理解できないのですか?誰にもアイデアがありますか?

4

2 に答える 2

4

なぜこれが起こっているのかがわかったと思います。100% 確信があるわけではありませんが、それを証明するために system.web.dll を再コンパイルすることはできません。system.web.dll で次のコードを見つけました。

namespace System.Web.Compilation
{
    /// <summary>Provides a container for building an assembly from one or more virtual paths within an ASP.NET project.</summary>
    public class AssemblyBuilder
......
}

381 行目:

internal CompilerParameters GetCompilerParameters()
{
    CompilerParameters compilerParameters = this._compilerType.CompilerParameters;
    string text = this._tempFiles.TempDir;
    if (this.CultureName != null)
    {
        text = Path.Combine(text, this.CultureName);
        Directory.CreateDirectory(text);
        compilerParameters.OutputAssembly = Path.Combine(text, this.OutputAssemblyName + ".resources.dll");
    }
    else
    {
        compilerParameters.OutputAssembly = Path.Combine(text, this.OutputAssemblyName + ".dll");
    }

ご覧のとおり、dll のみが必要です。

compilerParameters.OutputAssembly = Path.Combine(text, this.OutputAssemblyName + ".dll");
于 2014-02-07T23:20:28.980 に答える
0

ほとんどの場合、最初のプロジェクトをコンソール アプリケーションとしてビルドできません (静的Mainメソッドはありますか?)。また、最初のプロジェクトをビルドできないため、2 番目のプロジェクトは、参照がないためビルドに失敗します。つまり、最初のプロジェクトのアセンブリがありません。

EF モデルをコンソール アプリケーションに含める理由は何ですか?

于 2014-02-07T00:15:19.733 に答える