小编Pra*_*eek的帖子

使用MSBuild构建解决方案文件夹

我们有一个解决方案文件,它包含了一些解决方案的文件夹:图书馆,单元测试,应用...

使用VS2010,我们可以通过右键单击并使用"build"或"rebuild"来构建给定文件夹的项目.

这对开发人员的工作站来说是完美的,我们也想在使用MSBuild的连续集成服务器上做同样的事情.

那么,我们可以用MSBuild构建一个解决方案文件夹吗?

或者我们是否必须为每个文件夹创建专用解决方案?

在此先感谢您的帮助.

最终编辑:以下回复的结论是,他们没有内置的方法来做到这一点,但一些解决方法:

  • 仅使用所选项目创建专用解决方案,
  • 使用专用的csproj构建选定的项目,
  • 添加一个新项目,该项目将引用现有解决方案文件中的选定项目.

我选择使用专用的解决方案文件,因为它不是更具侵入性和棘手的方式,但不是更灵活(专用的csproj解决方案应提供完全控制).

msbuild continuous-integration solution visual-studio-2010 visual-studio

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

如何跟踪.Net线程池使用情况?

AFAIK .Net库中的一些方法能够异步执行I/O作业而不消耗池中的线程.

如果我的信息是正确的,WebClient*Async方法就是这样做的.

我想通过检查下载过程中是否有效地使用池中的线程来验证它.

所以我的一般问题是:如何监控线程池的当前状态?

  • 线程数

  • 忙线程数

是否有一些API(GetAvailableThreads?)或性能计数器可以提供此信息?


编辑:这里有一些更多的细节

我正在为教育目的写一个简单的基准:

string[] urls = Enumerable.Repeat("http://google.com", 32).ToArray();
/*{
    "http://google.com",
    "http://yahoo.com",
    "http://microsoft.com",
    "http://wikipedia.com",
    "http://cnn.com",
    "http://facebook.com",
    "http://youtube.com",
    "http://twitter.com"
};*/

/*Task.Run(() =>
    {
        while (true)
        {
            int wt, cpt;
            ThreadPool.GetAvailableThreads(out wt, out cpt);
            Console.WriteLine("{0} / {1}", wt, cpt);
            Thread.Sleep(100);
        }
    });*/

WebClient webClient = new WebClient();
Stopwatch stopwatch = Stopwatch.StartNew();
foreach (string url in urls)
{
    webClient.DownloadString(url);
    Console.WriteLine("Got '{0}'", url);
}
stopwatch.Stop(); …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading threadpool

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

如何在之前声明的另一个模板参数中使用模板参数

模板参数可以在以下方式使用的另一个模板参数中使用:

template<typename T, T N>
struct s
{
};
Run Code Online (Sandbox Code Playgroud)

但如果在"N"之后声明它是否可以引用"T"?

这不起作用:

template<T N, typename T>
struct s
{
};
Run Code Online (Sandbox Code Playgroud)

我们可以通过预先声明"T"或做其他事情来帮助编译器吗?

谢谢你提前.

编辑:因为前两个回复询问"你为什么愿意这样做?" 我将解释目标:

我想让编译器推断类型"T",以便更容易使用模板化类.

例如 :

template<typename T, T A, T B>
struct sum
{
    static T const value = A + B;
};
Run Code Online (Sandbox Code Playgroud)

这个模板可以这样使用:

sum<int, 1, 2>::value
Run Code Online (Sandbox Code Playgroud)

但如果可以这样使用它会更好:

sum<1, 2>::value
Run Code Online (Sandbox Code Playgroud)

从技术上讲,它应该是可能的,因为编译器知道"1"和"2"的类型:"int",实际上它使用这些信息来找到函数的最佳重载.所以通过这种方式声明模板:

template<T A, T B, typename T>
struct sum
{
    static T const value = A + B;
};
Run Code Online (Sandbox Code Playgroud)

编译器可以使用其功能从第一个和第二个提供的信息中推断出最后一个参数,然后找到要实例化的最佳模板.

c++ parameters templates declaration

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

混合浮动和固定定位

这是浮动固定的标准用法:

<html>
<head>
    <style type="text/css">
        #bigDiv
        {
            background-color: red;
            height: 2000px;
            width: 100px;
            float: left;
        }
        #littleDiv
        {
            background-color: green;
            height: 400px;
            width: 200px;
            float: left;            
        }
        #littleDivFixed
        {
            background-color: blue;
            height: 100px;
            width: 200px;
            position: fixed;
        }
    </style>
</head>
<body>
    <div id="bigDiv">
    </div>
    <div id="littleDiv">
    </div>
    <div id="littleDivFixed">
    </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

_

  • "littleDiv"div位于"bigDiv"div的右侧,但不跟随滚动,
  • 相反,"littleDivFixed"div相对于"bigDiv"div滚动但不是很好定位(它总是卡在显示屏的左侧).

_

是否有可能混合这两种行为的div:

  • 总是在"bigDiv"div的右边(距离为10px),
  • 总是在显示器上(距离顶部10px的恒定距离)?

_

在此先感谢您的帮助.

css position positioning fixed css-float

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

每个CLR或每个进程是否有一个托管堆?

据我所知,在.NET 4.0之前,事情很简单:一个进程只能托管一个CLR.

但是从版本4.0开始,一个进程可以托管多个CLR.

在这种情况下,我猜每个CLR有一个堆,因为每个CLR都有自己的状态和自己的GC,它有自己管理内存和自己的收集周期的方式,所以共享内存似乎是不可能的.

1)你能否确认这是最终的情况还是更微妙?

2)两个CLR是否在同一个过程中被严格隔离,还是可以分享?(特别是如果他们有相同的版本,他们可以互相了解)

我想答案是肯定的和是(孤立的),但我想确定.

感谢您的任何见解.

.net heap clr

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

为什么Database.Log不是一个事件?

实体框架最近添加了使用Database.Log钩子捕获SQL查询的功能.

让我感到惊讶的是,它并没有被实现为"受保护的封装友好的装甲" 委托,也就是一个事件,而是作为一个裸的多播委托.

事实上,我见过EF团队成员这样做:

context.Database.Log = sql => Debug.WriteLine(sql);
Run Code Online (Sandbox Code Playgroud)

在哪里我期望:

context.Database.Log += sql => Debug.WriteLine(sql);
Run Code Online (Sandbox Code Playgroud)

避免删除以前注册的处理程序.

此外,我们可以直接调用它:

context.Database.Log("SORRY SQL IS TOO MEDIEVAL FOR ME");
Run Code Online (Sandbox Code Playgroud)

这当然不是我期望做的事情.

这个选择背后是否存在一些理由,或者原始开发者错过了一个喝咖啡休息时间并忘记event在提交之前添加关键字.;)

编辑:突然间我有一个非常可怕的疑问:作为一名.Net从业者和培训师,我"测量"了97%的.Net开发人员确信事件必须是EventHandlers,所以如果我审计"正常"公司源代码我会想:没关系,这家伙不知道它可以使用任何委托类型和简单(我们只需要转移一个string)不想使用一个EventHandler所以他认为他不能使用和事件所以而是在不考虑封装"问题"的情况下使用了裸代理.但这将是一个"正常"的公司,我认为这是微软开发人员极不可能的......

.net c# entity-framework

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

欺骗.Net的可能令人讨厌的副作用是为COM提供可选的ref参数

最终编辑

我已经对"功能"进行了更全面的测试并编写了一篇完整的文章:可选的C95参考参数传递给VBA COM API

欢迎任何反馈.


在无论什么原因C#的方法不能有可选的 通过引用传递(标有refout)参数.

但在VBA,VB6COM等其他基础设施中,这是可能的.

使用COM桥接C#与VBA我已经找到一种方法通过标记来克服C#的限制ref参数,[Optional]这是AFAIK什么C#编译器生成在其管道的末端.

void SomeDotNetCSMethod([Optional] ref someParameter)
Run Code Online (Sandbox Code Playgroud)

这看起来像一个魅力:当从VBA调用C#时,我可以省略ref参数,当然我可以从.Net/C#端读取和更改它们.

但由于我没有找到任何关于它的文字,我想确定这个"技巧"没有任何不良副作用.

你知道任何 ?你能想象吗?


编辑

使用[DefaultParameterValue]属性我可能已经找到了让VBA看到参数的默认值的方法,但仅适用于某些类型.

我会做更多测试以确认这是按预期工作的......

.net c# com vba excel-vba

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

'A字段初始值设定项的概念原因不能引用非静态字段,方法或属性'CS0236错误

C#不允许实例字段初始值设定项引用另一个字段.例如,此代码无效:

class A
{
 string s1 = "";
 string s2 = s1;
}
Run Code Online (Sandbox Code Playgroud)

因为"s2"引用"s1".

但为什么不允许这样做呢?

我的第一个想法是C#规范不保证任何初始化顺序,但根据规范,顺序是声明的顺序:

变量初始值设定项以它们出现在类声明中的文本顺序执行.

因此,如果订单是确定性的,那么这类代码的缺陷可能是什么?

在此先感谢您的帮助.

编辑:

根据Hps,0xA3Peter的答案:

  • 继承方案中的初始化顺序可能非常混乱,

  • 实现这样的功能需要编译器开发团队的一些资源,但收效甚微,

  • 由于逻辑原因,不可能使用方法或属性(感谢Peter),因此为了保持一致性,字段也是如此.

c# specifications field object-initializers

6
推荐指数
2
解决办法
697
查看次数

显式接口实现限制

我有一个非常简单的场景:" "可以是公司的" 客户 "或" 员工 ".

A" ",可以通过电话与"被称为呼叫 "的方法.

根据" "在通话环境中扮演的角色,例如新产品的公告或组织变更的公告,我们应该使用为" 客户 "角色提供的电话号码或提供的电话号码为" 员工 "角色.

以下是对情况的总结:

interface IPerson
{
    void Call();
}

interface ICustomer : IPerson
{
}

interface IEmployee : IPerson
{
}

class Both : ICustomer, IEmployee
{
    void ICustomer.Call()
    {
        // Call to external phone number
    }

    void IEmployee.Call()
    {
        // Call to internal phone number
    }
}
Run Code Online (Sandbox Code Playgroud)

但是这段代码不能编译并产生错误:

error CS0539: 'ICustomer.Call' in explicit interface declaration is not a member of …
Run Code Online (Sandbox Code Playgroud)

c# interface explicit-interface

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

单击后如何延迟Bootstrap 3模式的显示

我试图在用户点击触发按钮后延迟显示Bootstrap模式:

<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
  Launch demo modal
</button>
Run Code Online (Sandbox Code Playgroud)

看看Bootstrap 3文档,我可以看到有一个show事件可以挂钩,但我不确定如何在模式出现在屏幕上之前引入3秒延迟.希望有人能帮忙吗?

参考:http: //getbootstrap.com/javascript/#modals

javascript jquery twitter-bootstrap twitter-bootstrap-3

6
推荐指数
2
解决办法
9867
查看次数