部署实体框架WPF应用程序 [英] Deploying Entity Framework WPF Application

查看:97
本文介绍了部署实体框架WPF应用程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我制作了一个使用EF6代码优先数据库的WPF应用程序。
我一直在Visual Studio中使用默认的LocalDb进行所有操作。
客户想要测试我到目前为止所做的事情。我尝试将ClickOnce应用程序安装到我的开发PC上。该程序根本无法启动,没有窗口打开。
我已经部署了一个简单的WPF应用程序,并且可以立即运行,因此我推测它是EF组件。

I've made a WPF application that uses EF6 code first database. I've been doing it all in Visual Studio and using the default LocalDb. The client wants to test what i've doe so far. I've tried ClickOnce application installation to my development PC. The program simply doesn't start, no window opens.... absolutely nothing happens. I've deployed a simple WPF app and it works right away so i surmise it's the EF component.


  • 我该如何得到某种输出日志或进行调试,以便我可以看到错误是什么?

  • 关于如何解决错误的任何想法?

  • 在哪里

  • 如何连接调试器?

  • How do i get some sort of output log, or debugging so i can see what the error is?
  • Any ideas on how to fix the error?
  • Where does it get installed to?
  • How can i attach the debugger?

来自App.config的我的连接详细信息

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="EEHA_Inspector.Properties.Settings.EEHA_Inspector_Model_EEHA_DbContextConnectionString"
      connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=EEHA_Inspector.Model.EEHA_DbContext;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

任何帮助将不胜感激。

更新#2-Windows日志异常

Application: EEHA_Inspector.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Data.SqlClient.SqlException
   at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(System.Data.Common.DbConnection, UInt32, Boolean, Boolean, System.Data.Common.DbConnectionOptions, System.Data.ProviderBase.DbConnectionInternal ByRef)
   at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(System.Data.Common.DbConnection, System.Threading.Tasks.TaskCompletionSource`1<System.Data.ProviderBase.DbConnectionInternal>, System.Data.Common.DbConnectionOptions, System.Data.ProviderBase.DbConnectionInternal ByRef)
   at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(System.Data.Common.DbConnection, System.Threading.Tasks.TaskCompletionSource`1<System.Data.ProviderBase.DbConnectionInternal>, System.Data.Common.DbConnectionOptions, System.Data.ProviderBase.DbConnectionInternal, System.Data.ProviderBase.DbConnectionInternal ByRef)
   at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(System.Data.Common.DbConnection, System.Data.ProviderBase.DbConnectionFactory, System.Threading.Tasks.TaskCompletionSource`1<System.Data.ProviderBase.DbConnectionInternal>, System.Data.Common.DbConnectionOptions)
   at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(System.Data.Common.DbConnection, System.Data.ProviderBase.DbConnectionFactory, System.Threading.Tasks.TaskCompletionSource`1<System.Data.ProviderBase.DbConnectionInternal>, System.Data.Common.DbConnectionOptions)
   at System.Data.SqlClient.SqlConnection.TryOpenInner(System.Threading.Tasks.TaskCompletionSource`1<System.Data.ProviderBase.DbConnectionInternal>)
   at System.Data.SqlClient.SqlConnection.TryOpen(System.Threading.Tasks.TaskCompletionSource`1<System.Data.ProviderBase.DbConnectionInternal>)
   at System.Data.SqlClient.SqlConnection.Open()
   at System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.<Open>b__36(System.Data.Common.DbConnection, System.Data.Entity.Infrastructure.Interception.DbConnectionInterceptionContext)
   at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Dispatch[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.__Canon, System.Action`2<System.__Canon,System.__Canon>, System.__Canon, System.Action`3<System.__Canon,System.__Canon,System.__Canon>, System.Action`3<System.__Canon,System.__Canon,System.__Canon>)
   at System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.Open(System.Data.Common.DbConnection, System.Data.Entity.Infrastructure.Interception.DbInterceptionContext)
   at System.Data.Entity.Core.EntityClient.EntityConnection.<Open>b__2()
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy+<>c__DisplayClass1.<Execute>b__0()
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.Func`1<System.__Canon>)
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(System.Action)
   at System.Data.Entity.Core.EntityClient.EntityConnection.Open()

Exception Info: System.Data.Entity.Core.EntityException
   at System.Data.Entity.Core.EntityClient.EntityConnection.Open()
   at System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection(Boolean)
   at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.Func`1<System.__Canon>, System.Data.Entity.Infrastructure.IDbExecutionStrategy, Boolean, Boolean)
   at System.Data.Entity.Core.Objects.ObjectQuery`1+<>c__DisplayClass7[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].<GetResults>b__5()
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.Func`1<System.__Canon>)
   at System.Data.Entity.Core.Objects.ObjectQuery`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].GetResults(System.Nullable`1<System.Data.Entity.Core.Objects.MergeOption>)
   at System.Data.Entity.Core.Objects.ObjectQuery`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0()
   at System.Data.Entity.Internal.LazyEnumerator`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].MoveNext()
   at System.Linq.Enumerable.FirstOrDefault[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
   at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
   at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.Collections.Generic.IEnumerable`1<System.__Canon>, System.Linq.Expressions.Expression)
   at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.Linq.Expressions.Expression)
   at System.Data.Entity.Internal.Linq.DbQueryProvider.Execute[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.Linq.Expressions.Expression)
   at System.Linq.Queryable.FirstOrDefault[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.Linq.IQueryable`1<System.__Canon>)
   at System.Data.Entity.Internal.EdmMetadataRepository.QueryForModelHash(System.Func`2<System.Data.Common.DbConnection,System.Data.Entity.Internal.EdmMetadataContext>)
   at System.Data.Entity.Internal.InternalContext.QueryForModelHash()
   at System.Data.Entity.Internal.ModelCompatibilityChecker.CompatibleWithModel(System.Data.Entity.Internal.InternalContext, System.Data.Entity.Internal.ModelHashCalculator, Boolean, System.Data.Entity.Internal.DatabaseExistenceState)
   at System.Data.Entity.Internal.InternalContext.CompatibleWithModel(Boolean, System.Data.Entity.Internal.DatabaseExistenceState)
   at System.Data.Entity.CreateDatabaseIfNotExists`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].InitializeDatabase(System.__Canon)
   at System.Data.Entity.Internal.InternalContext+<>c__DisplayClassf`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].<CreateInitializationAction>b__e()
   at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(System.Action)

Exception Info: System.Data.DataException
   at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(System.Action)
   at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()
   at System.Data.Entity.Internal.LazyInternalContext.<InitializeDatabase>b__4(System.Data.Entity.Internal.InternalContext)
   at System.Data.Entity.Internal.RetryAction`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].PerformAction(System.__Canon)
   at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(System.Action`1<System.Data.Entity.Internal.InternalContext>)
   at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase()
   at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(System.Type)
   at System.Data.Entity.Internal.Linq.InternalSet`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Initialize()
   at System.Data.Entity.Internal.Linq.InternalSet`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].get_InternalContext()
   at System.Data.Entity.Infrastructure.DbQuery`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].System.Linq.IQueryable.get_Provider()
   at System.Linq.Queryable.Where[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.Linq.IQueryable`1<System.__Canon>, System.Linq.Expressions.Expression`1<System.Func`2<System.__Canon,Boolean>>)
   at EEHA_Inspector.Model.LoadObvCollection+<Equips>d__4.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   at EEHA_Inspector.ViewModel.EquipRegVm+<Load>d__55.MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__6_0(System.Object)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)
   at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   at MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext, System.Threading.ContextCallback, System.Object)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
   at System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)
   at System.Windows.Application.RunDispatcher(System.Object)
   at System.Windows.Application.RunInternal(System.Windows.Window)
   at System.Windows.Application.Run(System.Windows.Window)
   at EEHA_Inspector.App.Main()

更新#2-Windows日志信息

Fault bucket 129273820369, type 5
Event Name: CLR20r3
Response: Not available
Cab Id: 0

Problem signature:
P1: EEHA_Inspector.exe
P2: 1.0.0.0
P3: 58222f01
P4: System.Data
P5: 4.6.1586.0
P6: 575a1428
P7: 29fe
P8: 108
P9: System.Data.DataException
P10: 

Attached files:
\\?\C:\ProgramData\Microsoft\Windows\WER\Temp\WERCB7E.tmp.WERInternalMetadata.xml

These files may be available here:
C:\ProgramData\Microsoft\Windows\WER\ReportArchive\AppCrash_EEHA_Inspector.e_11252b12b7f6697437e3ba42fb9b6e25caa6b8_5e1d3f42_3a80d3bb

Analysis symbol: 
Rechecking for solution: 0
Report Id: 91f3e855-2996-40fe-b5fd-957527bbdc9d
Report Status: 0
Hashed bucket: f5ea3fa3886ba4e09d8362936de86fe8

更新#2-Windows日志中的应用程序错误

Faulting application name: EEHA_Inspector.exe, version: 1.0.0.0, time stamp: 0x58222f01
Faulting module name: KERNELBASE.dll, version: 10.0.14393.0, time stamp: 0x57898e34
Exception code: 0xe0434352
Fault offset: 0x000d96c2
Faulting process id: 0x5458
Faulting application start time: 0x01d239ffc4803847
Faulting application path: C:\Users\agibson\AppData\Local\Apps\2.0\1RVHJ9WW.8JB\BDB4M51Q.L3R\eeha..tion_fe2d9ab6a328f11f_0001.0000_19df975805717e2b\EEHA_Inspector.exe
Faulting module path: C:\Windows\System32\KERNELBASE.dll
Report Id: 91f3e855-2996-40fe-b5fd-957527bbdc9d
Faulting package full name: 
Faulting package-relative application ID: 

更新3 ============= =====================================

DbContext中的OnModelOveride

namespace EEHA_Inspector.Model
{

    /// <summary>
    /// Database Definition.
    /// </summary>
    public class EEHA_DbContext : DbContext
    {
...............
/// <summary>
        /// Fluent API - Entity Building Configuration. Used to define extra conditions when building the model.
        /// These are more powerful than data annotations but also more complex.
        /// </summary>
        /// <param name="modelBuilder"></param>
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            /* FLUENT API MODEL OVERIDE - INTERMEDIARY TABLES
             *  Creates an intermediate mapping tables to hold many-to-many relationships between
             *  two tables. This is since one table can have multiple objects from another table.
             *  This intermediate table is used just as a look up table.
             *  Although its a look up table, databases must be configured to show the link two ways 
             *  since its not possible to have a many-to-many unidirectional relationship.
             *  By mapping these intermediary table; the lookup table stays clear of the relationship;
             *  while this intermediary table handles the needed mapping to make it possible.
             *  E.g. An Equip object contains a collection of Protections; while a Protection
             *  does not contain any reference to an Equip; since this is handled in a 3rd mapping table,
             *  created by these Fluent API model builder commands. */

            // Equipment Many-To-Many Look Up to ProtectionCodes
            modelBuilder.Entity<Equip>()
            .HasMany(e => e.Protections)
            .WithMany()
            .Map(x =>
            {
                x.MapLeftKey("EquipId");
                x.MapRightKey("ProtectionId");
                x.ToTable("EquipMapToProtections");
            });

            // InspectCheck Many-To-Many Look Up to InspectGrades
            modelBuilder.Entity<InspectCheck>()
            .HasMany(i => i.InspectGrades)
            .WithMany()
            .Map(x =>
            {
                x.MapLeftKey("InspectCheckId");
                x.MapRightKey("InspectGradeId");
                x.ToTable("InspectCheckMapToInspectGrades");
            });
        }


    }
}

更新3.1
初始化程序设置

UPDATE 3.1 Initialiser Setup

    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        public App()
        {
            // Set the database initializer
            Database.SetInitializer<EEHA_DbContext>(new EEHA_DbInit());
        }
}

种子覆盖

#if DEBUG
#define DESTROY_DB_ONSTART //TODO remove when development progresses. Will make the database get dropped upon every start up
#endif
namespace EEHA_Inspector.Model
{
    /// <summary>
    /// Custom Initialiser for the HA Database.
    /// Set the initialiliser in the App.xaml.cs class contructor (make one if not there).
    ///  <code>Database.SetInitializer<EEHA_DbContext>(new EEHA_DbInit());</code>
    /// </summary>
#if DESTROY_DB_ONSTART
    class EEHA_DbInit : DropCreateDatabaseAlways<EEHA_DbContext>
#else
    class EEHA_DbInit : CreateDatabaseIfNotExists<EEHA_DbContext>
#endif
    {

#if DESTROY_DB_ONSTART
        /// <summary>
        /// Overide the Initialize to force a close of all connections when in testing
        /// </summary>
        /// <param name="Db">The DbContext to operate on.</param>
        public override void InitializeDatabase(EEHA_DbContext Db)
        {
#if DEBUG
            this.KillAllConnections(Db);
#endif
            base.InitializeDatabase(Db);
        }
#endif


        protected override void Seed(EEHA_DbContext Db)
        {
.....changes to Db
Db.SaveChanges();
base.Seed(Db);
Db.SaveChanges(); //TODO needed?
}

更新4-使用DbConfig
今天早些时候,我手动运行了SQLExpress安装程序,并使用了所有选项的默认设置。
我已经根据在msdn更新中可以找到的内容转换为DbConfig。这可以在Visual Studio中再次使用。以我提供给DbContext构造函数的名称制作Db。
只是要确保我卸载了ClickOnce安装程序。重新安装。当我较早摆弄时,我注意到了这一点,但是现在我看到一个对话框,提示无法启动应用程序||无法启动应用程序。请与应用程序供应商联系。与之前的应用会运行然后崩溃的情况不同。这种新方法没有给我任何自定义异常日志,但我确实得到了如下所示的详细信息:

UPDATE 4 - Using DbConfig Earlier today i ran the SQLExpress install manually and just went with the defaults for all options. I've converted to DbConfig based on what i could find on the msdn update. This works again in visual studio. Making the Db at the name i gave to the DbContext Constructor. Just to be sure i uninstalled the programs ClickOnce install. Reinstalled. When i was fiddling earlier i noticed this, but i now get a dialog box saying "Cannot Start Application || Application cannot be started. Contact the application Vendor". Unlike earlier where the app would run and then crash. This new way gives me no custom exception log, but i do get details shown below:

无法启动应用程序错误-详细信息按钮.log

PLATFORM VERSION INFO
    Windows             : 10.0.14393.0 (Win32NT)
    Common Language Runtime     : 4.0.30319.42000
    System.Deployment.dll       : 4.6.1586.0 built by: NETFXREL2
    clr.dll             : 4.6.1586.0 built by: NETFXREL2
    dfdll.dll           : 4.6.1586.0 built by: NETFXREL2
    dfshim.dll          : 10.0.14393.0 (rs1_release.160715-1616)

SOURCES
    Deployment url          : file:///C:/TempPath/EEHA/EEHA_Inspector.application

IDENTITIES
    Deployment Identity     : EEHA_Inspector.application, Version=1.0.0.17, Culture=neutral, PublicKeyToken=fe2d9ab6a328f11f, processorArchitecture=msil

APPLICATION SUMMARY
    * Installable application.

ERROR SUMMARY
    Below is a summary of the errors, details of these errors are listed later in the log.
    * Activation of C:\TempPath\EEHA\EEHA_Inspector.application resulted in exception. Following failure messages were detected:
        + External component has thrown an exception.

COMPONENT STORE TRANSACTION FAILURE SUMMARY
    No transaction error was detected.

WARNINGS
    There were no warnings during this operation.

OPERATION PROGRESS STATUS
    * [9/11/2016 8:03:58 PM] : Activation of C:\TempPath\EEHA\EEHA_Inspector.application has started.
    * [9/11/2016 8:03:58 PM] : Processing of deployment manifest has successfully completed.

ERROR DETAILS
    Following errors were detected during this operation.
    * [9/11/2016 8:03:58 PM] System.Runtime.InteropServices.SEHException
        - External component has thrown an exception.
        - Source: System.Deployment
        - Stack trace:
            at System.Deployment.Internal.Isolation.IStateManager.Scavenge(UInt32 Flags, UInt32& Disposition)
            at System.Deployment.Application.ComponentStore.SubmitStoreTransaction(StoreTransactionContext storeTxn, SubscriptionState subState)
            at System.Deployment.Application.ComponentStore.SetPendingDeployment(SubscriptionState subState, DefinitionIdentity deployId, DateTime checkTime)
            at System.Deployment.Application.SubscriptionStore.SetLastCheckTimeToNow(SubscriptionState subState)
            at System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(Uri activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension, BrowserSettings browserSettings, String& errorPageUrl)
            at System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(Object state)

COMPONENT STORE TRANSACTION DETAILS
    * Transaction at [9/11/2016 8:03:58 PM]
        + System.Deployment.Internal.Isolation.StoreOperationSetDeploymentMetadata
            - Status: Set
            - HRESULT: 0x0
        + System.Deployment.Internal.Isolation.StoreTransactionOperationType (27)
            - HRESULT: 0x0

Db上下文构造器

public EEHA_DbContext() : base("TestEEHACodeDb")
    {

    }

DbConfig类

namespace EEHA_Inspector.Model
{
    public class EEHA_DbConfig : DbConfiguration
    {
        public EEHA_DbConfig()
        {
            SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());
            SetDefaultConnectionFactory(new LocalDbConnectionFactory("v11.0"));
        }
    }
}

App.config删除了连接字符串。我要删除更多吗?

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <!--<connectionStrings>
    <add name="EEHA_Inspector.Properties.Settings.EEHA_Inspector_Model_EEHA_DbContextConnectionString"
      connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=EEHA_Inspector.Model.EEHA_DbContext;Integrated Security=True"
      providerName="System.Data.SqlClient" />
    --><!--<add name="EEHA_Inspector.Properties.Settings.EEHA_Inspector_Model_EEHA_DbContextConnectionString"
     connectionString="Data Source=./SQLEXPRESS;Initial Catalog=EEHA_Inspector.Model.EEHA_DbContext;Integrated Security=True"
     providerName="System.Data.SqlClient" />--><!--
  </connectionStrings>-->
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
    <!--<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">-->
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

解决方案/ /打包
感谢grek40。特别是他的异常捕获代码。这使我可以开始进行更改以查找错误。在此之前,Windows日志根本没有帮助。
让我克服困难的是使用他建议的DbContext定义。由于某种原因,使用默认的DbContext构造函数和连接字符串似乎会使ClickOnce安装期望找到一个mdf文件。即使未指定附加附件。
异常捕获代码还允许我在发布模式下进行调试,以发现一些奇怪的异常(一次不适用于调试模式,或者对我来说没有任何意义)。我现在关闭了有问题的代码,因此我可以继续进行;单击一次安装现在可以正常工作。

SOLUTION/ / WRAP UP Thanks to grek40. Particularly his exception catching code. This allowed me to start making changes to find the errors. Prior to that, the windows logs didn't help at all. What put me past the hurdle was using the DbContext definition he suggested. For some reason using the default DbContext constructor and a connection string seemed to make ClickOnce install expect to find an mdf file; even though attaching one wasn't specified. The exception catch code also allowed my my debugging in release mode to find some odd exceptions (once that didn't apply to debug mode, or that made any sense to me). I've now turned off the offending code so i could proceed; the click once install now works.

推荐答案

我要确保您实际上已尽一切可能捕获并记录发生的异常

I want to make sure that you actually do everything possible to catch and log the occuring exception.

请确保在 App.xaml 中使用 DispatcherUnhandledException

<Application
    x:Class="[Your Stuff]"
    DispatcherUnhandledException="Application_DispatcherUnhandledException">
</Application>

在处理程序中实现一些登录(在 App.xaml.cs内部)。它应该是对所有内部异常的异常消息及其堆栈跟踪进行汇总的内容。只需将该信息写入某种日志文件(在我的示例中为 C:\Temp\MyAppCrashes.log )。

Implement some logging in the handler (inside App.xaml.cs). It should be something that summarizes the exception messages of all inner exceptions as well as their stack traces. Just write that information to some sort of log file (C:\Temp\MyAppCrashes.log in my example).

private void Application_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
    var sb = new StringBuilder();

    AppendExceptionMessages(sb, e.Exception);
    AppendExceptionStacktraces(sb, e.Exception);

    File.AppendAllText(@"C:\Temp\MyAppCrashes.log", sb.ToString());
}

private void AppendExceptionMessages(StringBuilder sb, Exception e)
{
    while (e != null)
    {
        sb.AppendLine("============== Exception ===============").AppendLine(e.Message);
        e = e.InnerException;
    }
}
private void AppendExceptionStacktraces(StringBuilder sb, Exception e)
{
    while (e != null)
    {
        sb.AppendLine("======== Exception Stacktrace ==========").AppendLine(e.StackTrace);
        e = e.InnerException;
    }
}

我希望这能揭示更多的信息,如果不是这样的话足够,请确保在 App.xaml 中注册 Startup 处理程序,而不是 StartupUri 。在启动过程中,在创建任何窗口之前,请创建您的数据库上下文的实例,调用 db.Database.Exists() db.Database.Initialize (true),请确保检查 Exists 返回值,并将调用包装在 try-catch 。当然,如果发现任何异常,请写日志详细信息。

I hope this reveals some more information, if it's not enough, make sure to register a Startup handler in App.xaml instead of a StartupUri. In the startup, before creating any window, create an instance of your db context, call db.Database.Exists() and db.Database.Initialize(true), make sure to check the Exists return value and wrap the calls in try-catch. Ofcourse, write logging details if any exception is caught.

到目前为止,希望您能找到使用该方法的任何东西。

So far for now, hope you find anything with that approach.

这篇关于部署实体框架WPF应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆