Entity framework Wix安装项目中断无关迁移更新数据库调用
在将不相关的Wix安装项目添加到解决方案后,在ASP.NET MVC Web应用程序上从Package Manager控制台运行Entity framework Wix安装项目中断无关迁移更新数据库调用,entity-framework,wix,entity-framework-migrations,Entity Framework,Wix,Entity Framework Migrations,在将不相关的Wix安装项目添加到解决方案后,在ASP.NET MVC Web应用程序上从Package Manager控制台运行update database失败 为什么updatedatabase要访问这个不相关的项目?为什么wix项目的存在会触发无法找到的程序集加载?我该如何解决这个问题 这种情况发生在一个更大的解决方案中,包括web、桌面、安装程序项目,但经过相当多的思考后,我单独复制了这种情况: 使用ASP.NET MVC Web应用程序、实体框架、启用迁移、添加WebMatrix组件
update database
失败
为什么updatedatabase
要访问这个不相关的项目?为什么wix项目的存在会触发无法找到的程序集加载?我该如何解决这个问题
这种情况发生在一个更大的解决方案中,包括web、桌面、安装程序项目,但经过相当多的思考后,我单独复制了这种情况:
- 使用ASP.NET MVC Web应用程序、实体框架、启用迁移、添加WebMatrix组件、设置角色提供程序来设置新的库存标准VS解决方案
- 添加Configuration.Seed()方法调用
和WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection(..)
System.Web.Security.Roles
更新数据库
。它会很好用的。现在添加一个Wix安装项目(无需配置),它将在执行Seed()
时失败
Could not load file or assembly 'Microsoft.Build.Framework, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
因此,当试图从Package Manager控制台通过更新数据库调用WebSecurity/WebMatrix方法时,我的解决方案中有一个Wix项目似乎会触发额外(未找到)程序集的加载
解决方法:卸载Wix安装项目并重新启动Visual Studio。没有必要完全删除该项目
将缺少的dll添加到GAC或对machine.config的引用没有帮助。找到dll,但加载时出错
System.IO.FileLoadException: Loading this assembly would produce a different grant set from other instances. (Exception from HRESULT: 0x80131401)
使用FUSLOGVW.exe
记录程序集加载事件没有帮助。它基本上表明,updatedatabase
找不到v15.1dll,因为它不在GAC中,并且没有指向它的app/host/system配置文件
从正在运行的web应用程序运行seed方法(启用自动迁移)效果良好
是的,我正在将PMC“默认项目”设置为web应用程序,即web应用程序上的点updatedatabase
详情:
- Visual Studio Professional 2017关于Win 10 Pro的全面修补
- 最近从2015年起升级了VS。在2015年之前没有这样的问题
- Wix工具集3.11.0.1528
- 软件包管理器控制台4.1.0.2427
- System.Web.Mvc 5.2.3.0
- 实体框架6.1.3
- WebMatrix.Data.dll 3.0.0.0
- WebMatrix.WebData.dll 3.0.0.0
- Microsoft.Build.Framework.dll v15.1.0.0位于C:\Program Files(x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\中,Visual Studio在其app.config中重定向到它
class Configuration : DbMigrationsConfiguration<MyDbContextHere>
{
public Configuration() { AutomaticMigrationsEnabled = false; }
protected override void Seed(Stash context)
{
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfiles", "UserId", "UserName", autoCreateTables: true);
if(!Roles.RoleExists("G1")) Roles.CreateRole("G1");
}
}
`
类配置:dbmigrionsconfiguration
{
公共配置(){AutomaticMigrationsEnabled=false;}
受保护的覆盖无效种子(隐藏上下文)
{
WebSecurity.InitializeDatabaseConnection(“DefaultConnection”、“UserProfiles”、“UserId”、“UserName”,autoCreateTables:true);
如果(!Roles.RoleExists(“G1”))Roles.CreateRole(“G1”);
}
}
`
web.config:
`
<configuration>
<system.web>
<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
<providers>
<clear />
<add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData" />
</providers>
</roleManager>
`
这个讨论看起来很相关。有一些建议,但没有适合每个人的解决方案。你找到解决办法了吗?威利:我们还没有找到解决办法。当前解决方法:我们卸载安装程序项目并在更新数据库之前重新启动VS。痛苦,但现在没有足够的时间进一步调查。当我有机会的时候,我会看看你的链接。谢谢这个讨论看起来很相关。有一些建议,但没有适合每个人的解决方案。你找到解决办法了吗?威利:我们还没有找到解决办法。当前解决方法:我们卸载安装程序项目并在更新数据库之前重新启动VS。痛苦,但现在没有足够的时间进一步调查。当我有机会的时候,我会看看你的链接。谢谢T