2017-11-10 38 views
1

在VS2017中,我试图为QA设置一个新的配置。我将配置创建为“QA”并从“发布”复制设置。我确实选中了“创建新项目配置”复选框。VS2017 C#创建新的生成配置使用语句破解

当我切换到下拉菜单中的QA构建时,突然间出现了我在Debug或Release中没有的Entity Framework错误。

而且

“的类型或命名空间名称“的类型或命名空间名称‘实体’不存在命名空间‘System.Data’(是否缺少程序集引用?)存在” EntityConnectionStringBuilder'找不到(你是否缺少使用指令或程序集引用?)“

如果我切换到调试或发布,这些错误消失,一切都很好,并按预期工作。

下面的代码,这个问题与发生的事情:

using Redacted.Stuff; 
using System.Data.Entity.Core.EntityClient; 
using System.Reflection; 

namespace MoreRedacted.Stuff 
{ 
public class RedactedClass 
{ 
    public static string GetConnectionString() 
    { 
     var self = Assembly.GetCallingAssembly().GetName().Name; 

     string constr = string.Empty; 

#if (DEBUG) 
     constr = "connection_dev"; 
#elif (QA) 
     constr = "connection_qa"; 
#else 
     constr = "connection_prod"; 
#endif 

     return new EntityConnectionStringBuilder 
     { 
      Provider = "System.Data.SqlClient", 
      ProviderConnectionString = (new ConfigManager()).ConnectionStrings["RedactedConnection"].ConnectionString, 
      Metadata = $"res://{ self }/EF.EFRedacted.csdl|res://{ self }/EF.EFRedacted.ssdl|res://{ self }/EF.EFRedacted.msl" 
     }.ToString(); 
    } 
    } 
} 

感谢您的帮助!

+0

以前从未见过。我会关闭VS,手动加载所有bin和obj目录,重新加载,然后完成一次构建。如果它仍然给出这些错误,我会把它放在qa然后删除并替换EF的nuget包,清理和构建。 – Will

+0

在项目文件中,是否在引用包含相应实体框架类型的程序集的元素上声明了任何条件? –

+0

在正在执行此操作的方法中检查了一些条件,但它不应该产生直接影响。我将编辑该问题以添加代码。 – nclayton

回答

1

想通了......似乎即使这个项目是另一个项目的副本(我将它拆分为基于MEF插件),它并没有带来包装。我检查了一下,即使原始项目安装了EntityFramework ...实际上确实有意义,因为原始项目没有QA配置。

所以我想重要的是,如果项目被复制,然后新的配置添加到组合中,nuget包会中断。 (我假设这是因为nuget如何在项目中设置软件包)。