2

我有一个解决方案。第一个项目包含实体框架模型,输出类型是控制台应用程序。其他项目是前端,asp.net mvc 5 应用程序,它具有来自第一个项目的实体的 CRUD 视图。从第二个项目引用的第一个项目,我也在 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

将 namespace () 添加到 views 文件夹中的 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方法吗?因为第一个项目无法构建,第二个项目无法构建,因为缺少引用 - 即第一个项目缺少程序集。

为什么要将 EF 模型包含在控制台应用程序中?

于 2014-02-07T00:15:19.733 回答