小编bgx*_*bgx的帖子

如何以编程方式检测 Office 2019?

我们习惯于通过获取完整版本(例如从已安装的 Office 可执行文件的文件信息)来检测当前安装的 Office 版本,并将市长版本映射到友好名称,例如 15 个映射到“Office 2013”​​,16 个映射到“Office 2016 年”。

但是Office 2019的主要版本号没有变化,我们得到的版本号是16.0.10827.20138

是否有可靠的方法将次要版本号映射到“Office 2019”?从哪个值开始是 2019 年?是否有其他方法可以检测是否安装了 Office 2019?

“Office 2016”没有更多的小更新了吗?

office365 excel-2019

6
推荐指数
1
解决办法
5132
查看次数

EF 6 暂停执行策略和重叠执行 - “不支持用户发起的交易”异常

我在需要使用分布式事务的任何地方实现了 EF 6 执行策略的暂停,以避免“'SqlAzureExecutionStrategy' 不支持用户启动的事务”异常,如下所示:

https://romiller.com/2013/08/19/ef6-suspendable-execution-strategy/ https://msdn.microsoft.com/en-us/library/dn307226(v=vs.113).aspx

但是,最近我在批量数据管理会话期间遇到了两次失败,最终导致了上述异常。

如果我理解正确,给定的示例在全局级别启用/禁用执行策略,这意味着如果在多个线程上同时执行操作,一个操作可以在另一个操作完成之前结束挂起。如果将 .NET 4.6.1 用于跨越多个 SQL Azure DB 的事务,则效果可能最明显,这可能需要一段时间才能完成。

为了避免这种情况,我求助于创建一个全局事务计数器,它以线程安全的方式递增和递减,并且只有在没有待处理的事务时才解除挂起,例如:

    public class MyConfiguration : DbConfiguration 
    { 
        public MyConfiguration() 
        { 
            this.SetExecutionStrategy("System.Data.SqlClient", () => SuspendExecutionStrategy 
              ? (IDbExecutionStrategy)new DefaultExecutionStrategy() 
              : new SqlAzureExecutionStrategy()); 
        } 

        public static bool SuspendExecutionStrategy 
        { 
            get 
            { 
                return (bool?)CallContext.LogicalGetData("SuspendExecutionStrategy") ?? false; 
            } 
            set 
            { 
                CallContext.LogicalSetData("SuspendExecutionStrategy", value); 
            } 
        } 
    } 
Run Code Online (Sandbox Code Playgroud)

进而:

public class ExecutionHelper
{
    private static int _pendingTransactions;

    public void ExecuteUsingTransaction(Action action)
    {
        SuspendExeutionStrategy();
        try
        {
            using (var transaction = new TransactionScope())
            { …
Run Code Online (Sandbox Code Playgroud)

c# transactions entity-framework-6

5
推荐指数
2
解决办法
2230
查看次数