小编Bob*_*orn的帖子

为什么我的交易不会升级到DTC?

我的机器上禁用DTC.我的理解是这个代码应该失败,因为它在同一个事务中使用了两个数据上下文.那么,它为什么有用呢?(注意:我尝试使用.NET 3.5和.NET 4.0.)

using (TransactionScope transactionScope = new TransactionScope())
{
    UpdateEta();
    UpdateBin();

    transactionScope.Complete();
}
Run Code Online (Sandbox Code Playgroud)

以下是调用的DAL方法:

public static void UpdateBin(Bin updatedBin)
{
    using (DevProdDataDataContext dataContext = new DevProdDataDataContext(ConnectionString))
    {
        BinRecord binRecord = (from bin in dataContext.BinRecords
                               where bin.BinID == updatedBin.BinId
                               select bin).FirstOrDefault();

        binRecord.BinID   = updatedBin.BinId;
        binRecord.BinName = updatedBin.BinName;

        dataContext.SubmitChanges();
    }
}  

public static void UpdateEta(Eta updatedEta)
{
    using (DevProdDataDataContext dataContext = new DevProdDataDataContext(ConnectionString))
    {
        EtaRecord etaRecord = (from eta in dataContext.EtaRecords
                               where eta.ID == updatedEta.ID
                               select eta).FirstOrDefault();

        etaRecord.ID    = updatedEta.ID;
        etaRecord.Title …
Run Code Online (Sandbox Code Playgroud)

c# datacontext linq-to-sql

9
推荐指数
1
解决办法
489
查看次数

RavenDB升级

我几乎不敢在这里提出这个问题,因为它似乎应该可以通过谷歌或ravendb.net随时提供.但是,我一直很难找到将RavenDB升级到新版本的正确方法.我目前正在运行版本573,并希望升级到616,只是为了能够在Raven Studio中推广索引.

升级的正确方法是什么?我是否备份我的数据库,删除硬盘上的整个Raven文件夹,然后将新的616版本复制到同一个文件夹区域?然后恢复数据库?

编辑:

我如何将RavenDB v573升级到v960(2012年11月27日):

注意:不建议更改MaxPageSize(步骤7.b).

  1. 针对本地960运行自动化测试以验证没有任何中断.
  2. 备份573 RavenDB
  3. 将960安装/解压缩到生产服务器
  4. 将数据文件夹从573复制到960
  5. 授予用户PrestoDatabaseUser对数据文件夹的完全访问权限
  6. 卸载现有RavenDB服务:
    一.sc delete RavenDB
    湾 将旧的573文件夹重命名为RavenDB-Build-573_deprecate
  7. 设置Raven.Server.exe.config(从原始配置中删除任何更改的设置):
    a.<add key="Raven/AnonymousAccess" value="Get"/>
    <add key="Raven/MaxPageSize" value="2147483647"/>
    C.<add key="Raven/Authorization/Windows/RequiredUsers" value="domain\UserName"/>
  8. 安装即服务:
    a.C:\Software\RavenDb\RavenDB-Build-960\Server>Raven.Server.exe /install
  9. 将RavenDB备份批处理文件更改为指向新的960文件夹结构
  10. 如果服务/应用程序没有响应新的RavenDB,请重新启动它们.

ravendb

8
推荐指数
1
解决办法
1246
查看次数

Visual Studio解决方案Explorer位置

有没有人知道是否有办法总是让某个标签出现在顶部?我想在那里有解决方案资源管理器.

我知道我可以固定和取消固定,直到事情得到我想要的东西,但这可能会搞砸了进一步的钉扎和取消固定.

在此输入图像描述

visual-studio-2010 visual-studio visual-studio-2012

8
推荐指数
2
解决办法
1万
查看次数

Visual Studio在加载UI库时挂起

我很难过,我正在考虑格式化我的硬盘并重新开始.我以为我会尝试这是最后的努力.当我打开Visual Studio 2012(不是解决方案,只是VS本身)时,它通常会挂起几分钟.这个过去的时间(见下面的XML)它挂了大约13分钟.

下面是使用/log开关启动VS时ActivityLog.xml的片段.我不知道该怎么做这些数据.很多谷歌搜索显示其他人有类似但不完全相同的问题.如果您注意到下面的时间戳,您会发现问题的中心是"加载UI库".知道这实际意味着什么或如何解决它?

注意:显示的文件夹中不存在VsLogUI.dll,因此我不确定它为什么要尝试访问它.该文件在我的其他笔记本电脑上也不存在.路径中有两个斜杠,它在一个名为IDE*的文件夹中查找.看起来好像搞砸了.

  <entry>
    <record>1054</record>
    <time>2012/12/08 20:30:30.175</time>
    <type>Information</type>
    <source>VisualStudio</source>
    <description>End package load [Visual Studio Logging Package]</description>
    <guid>{2DC9DAA9-7F2D-11D2-9BFC-00C04F9901D1}</guid>
  </entry>
  <entry>
    <record>1055</record>
    <time>2012/12/08 20:33:51.723</time>
    <type>Information</type>
    <source>VisualStudio</source>
    <description>Loading UI library</description>
    <guid>{2DC9DAA9-7F2D-11D2-9BFC-00C04F9901D1}</guid>
    <path>C:\Program Files (x86)\Microsoft Visual Studio 11.0\\Common7\IDE*\VsLogUI.dll</path>
  </entry>
  <entry>
    <record>1056</record>
    <time>2012/12/08 20:42:28.350</time>
    <type>Information</type>
    <source>VisualStudio</source>
    <description>Entering function CVsPackageInfo::HrInstantiatePackage</description>
    <guid>{F384B236-B4A9-401B-BC58-3106E3ACA3EC}</guid>
  </entry>
Run Code Online (Sandbox Code Playgroud)

编辑 - 我在下面给出了这个答案,但它没有用.它适用于VS的一些启动,但在安装了一些扩展后,延迟又发生了.我被卡住了.

虽然我不知道为什么会这样,但我似乎找到了解决办法.创建文本文件并将其重命名为VsLogUI.dll后,VS 2012开始快速打开.显然该文件只需要存在.我把它放在这里:

C:\ Program Files(x86)\ Microsoft Visual Studio 11.0\Common7\IDE \

我打赌这种解决办法也会有效,虽然我有点害怕尝试它,因为它正在改变注册表.我想我可以先备份注册表.无论如何,这出现在注册表中:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node \微软\ MSDN\8.0\{包2DC9DAA9-7F2D-11d2-9BFC-00C04F9901D1}

它有一个名为SatelliteDll的子文件夹.它有一个名为DllName的属性,其值为VsLogUI.dll.我敢打赌,如果我删除该注册表项,问题就会消失.

visual-studio visual-studio-2012

8
推荐指数
1
解决办法
3010
查看次数

如果我们不验证使用单元测试调用私有方法,我们如何验证它们是否被调用?

我讨厌再次提起这件事,但我真的想了解如何用我的测试保护一些东西.

我有一个公共方法(下面),在调用另一个实际采取某些操作的方法之前调用私有方法.我想确保不会删除对私有方法的调用,因为这可能是灾难性的.我已经做了一些研究,在这里,这里,在这里,他们都说不要测试私有方法.我想,我可以理解,但是我如何防止删除这行代码

如您所见,public方法返回void,因此我无法测试公共方法调用的结果.我有ApplicationShouldBeInstalled()直接测试的单元测试.

public void InstallApplications()
{
    foreach (App app in this._apps)
    {
        // This is the line of code that can't be removed. How can I make
        // sure it doesn't get removed?
        if (!ApplicationShouldBeInstalled(app)) { continue; }

        // This simply can't run unless it passes the above call.
        CommonUtility.Container.Resolve<IAppInstaller>().InstallApplication(this, app);
    }                       
}
Run Code Online (Sandbox Code Playgroud)

编辑 - 根据JerKimball的回答,我选择了这个.

基本上,我只使用Mock对象(来自Moq),然后验证其方法被调用了预期的次数.

[TestMethod()]
public void ApplicationShouldBeInstalledTest_UseCase13()
{
    var mockAppInstaller = new Mock<IAppInstaller>();
    mockAppInstaller.Setup(m => …
Run Code Online (Sandbox Code Playgroud)

c# testing mstest moq

8
推荐指数
2
解决办法
3285
查看次数

Monitor.TryEnter with Generic Class

我有一种情况,为了测试,我只希望我的计时器方法(FooMethod)一次运行一个.在下面的示例中,FooMethod作为委托传递给计时器.这个类有很多具体的例子.我认为通过使_locker静态,只有一个FooMethod()实例会一次处理.但是当我运行应用程序时,多个线程一次超过TryEnter()行.

这就是我将每个类添加到新计时器的方法.这是在一个循环中为每个foo实例完成的:

_timers.Add(new Timer(foo.FooMethod, null, 0, 10000));
Run Code Online (Sandbox Code Playgroud)

这是具有该方法的类:

public class Foo<T>
{
    private static readonly object _locker = new object();

    public void FooMethod(object stateInfo)
    {
        // Don't let threads back up; just get out
        if (!Monitor.TryEnter(_locker)) { return; }

        try
        {
            // Logic here
        }
        finally
        {
            Monitor.Exit(_locker);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:通常,_locker不是静态的; 在有机会完成之前,我不希望同一个线程进入该方法.我把它改为静态测试.

我的第一个想法是,这可能不起作用,因为这个类是通用的?并且每个具体类实际上是它自己的类,它们不共享_locker变量?真的吗?如果这是真的,我应该如何让具体类共享一个_locker变量?我是否需要将静态_locker变量添加到Foos可以访问的其他类中?

c# multithreading locking

7
推荐指数
2
解决办法
331
查看次数

调试程序在VS 2012中跳过最新的签入代码 - 与VS 2010一起使用

编辑:我刚刚尝试使用VS 2010,问题没有发生.这个问题只发生在VS 2012上.这真的是一个错误吗?这也发生在我的两台独立笔记本电脑上,甚至在朋友的笔记本电脑上(刚刚获得最新代码).

首先,问题的截图.这个方法都是代码.

在此输入图像描述

调试器正在从我最近的签入中跳过代码.下面的代码中的注释解释了我调试此方法时发生的情况.所以真的没有必要尝试理解代码; 只是注意到正在跳过代码行.如果您认为代码与正在调试的程序集不匹配,请耐心等待.您将看到调试器识别新代码的位置,而不是现有代码.在删除磁盘上的代码并再次获取最新信息之后,这种行为发生在两台不同的笔记本电脑上.每个注释都会告诉您调试器是否命中一行.

[TestMethod()]
[DeploymentItem("PrestoCommon.dll")]
public void ApplicationShouldBeInstalledTest_UseCase9()
{
    // Debugger hits this line
    ApplicationServer appServerAccessor = new ApplicationServer();

    // Debugger does not hit these next two lines
    PrivateObject privateObject = new PrivateObject(appServerAccessor);
    ApplicationServer appServer = ApplicationServerLogic.GetByName("server10");

    // Debugger hits this line. Weirdness: both objects are null, and after this line runs,
    // appServerAccessor is no longer null.
    appServerAccessor.Id = appServer.Id;

    // Skips this line
    ApplicationWithOverrideVariableGroup appWithValidGroup = appServer.ApplicationsWithOverrideGroup[0];

    // Debugger hits this line, but …
Run Code Online (Sandbox Code Playgroud)

c# debugging mstest visual-studio-2012

7
推荐指数
1
解决办法
942
查看次数

为什么我的IDisposable对象上的Dispose()方法不可用?

我有一个这个领域的课:

private WcfChannelFactory<IPrestoService> _channelFactory;
Run Code Online (Sandbox Code Playgroud)

在这个Dispose()方法中,我这样做:

if (_channelFactory != null) { _channelFactory.Dispose(); }
Run Code Online (Sandbox Code Playgroud)

但这会产生错误:

无法访问IDisposable.Dispose的显式实现

经过一些研究后,似乎我可以这样处理:

if (_channelFactory != null) { (_channelFactory as IDisposable).Dispose(); }
Run Code Online (Sandbox Code Playgroud)

我不明白两件事:

  1. 为什么不可Dispose()用?WcfChannelFactory<T>派生自ChannelFactory<T>,派生自ChannelFactory哪个实现IDisposable.然而ChannelFactory,没有Dispose()方法.这怎么可能?

  2. 如果我可以(应该?)简单地调用Close()_channelFactory,为什么不XML文档状态Close()会也呼吁Dispose()?也许不会?这令人困惑.

c# dispose

7
推荐指数
1
解决办法
2406
查看次数

在我的代码中硬编码复杂的数学逻辑是否可以?

是否有一种普遍接受的编码复杂数学的最佳方法?例如:

double someNumber = .123 + .456 * Math.Pow(Math.E, .789 * Math.Pow((homeIndex + .22), .012));
Run Code Online (Sandbox Code Playgroud)

这是一个硬编码数字的点吗?或者每个数字是否都有与之相关的常数?或者是否有另一种方式,比如在config中存储计算并以某种方式调用它们?

会有很多像这样的代码,我试图让它保持可维护性.

注意:上面显示的示例只是一行.这些代码行将有数十或数百行.不仅数字会改变,而且公式也可以改变.

c#

7
推荐指数
1
解决办法
696
查看次数

IIS - 物理路径错误

我刚从Win 7升级到Win 10,我的IIS现在也是v10.在Win 7上浏览我的Web API时,它只是起作用.现在,在Win 10上,我得到了404 NOT Found.我刚刚打到localhost.我不明白的是为什么物理路径与IIS显示的不同,以及为什么物理路径中没有内容.

我的物理路径是这样的:C:\ DevFs\Apps\MultipleModuleAssembly\Components\Main\MmaComponents\Source\Server\MmaWebApi

在此输入图像描述

然而,当我浏览并获得失败时,我看到了这一点:

在此输入图像描述

为什么用户文件夹中的物理路径?C:\ Users\fs104679\Documents\My Website Sites\MmaWebClient-Site\MmaWebApi\api

运行应用程序时,为什么物理路径与我在IIS中设置的不同?

asp.net iis windows-10

7
推荐指数
2
解决办法
4103
查看次数