小编con*_*tor的帖子

在msdeploy中指定项目名称

我在一个解决方案中有两个Web项目,我想使用msbuild和WebDeploy来部署它们(这通过CI服务器发生).

目前,我正在运行命令行:

C:\ProjectFolder>msbuild <solution>.sln
    /p:Configuration=<Release>
    /p:OutputPath=bin
    /p:DeployOnBuild=True
    /p:DeployTarget=MSDeployPublish
    /p:MsDeployServiceUrl=https://<ServerUrl:port>/msdeploy.axd
    /p:username=<user>
    /p:password=<password>
    /p:AllowUntrustedCertificate=True
    /p:DeployIisAppPath=<SiteName>
    /p:MSDeployPublishMethod=WMSVC
Run Code Online (Sandbox Code Playgroud)

这按预期部署了一个项目.但是我如何部署另一个呢?在这个命令行中没有任何地方我指定了一个项目名称 - 为什么它选择一个项目来部署另一个项目?

理想情况下,我可以使用相同的命令部署两个项目,例如

...

    /p:Project=Project1
    /p:DeployIisAppPath=<SiteName>/Project1
    /p:Project=Project2
    /p:DeployIisAppPath=<SiteName>/Project2
Run Code Online (Sandbox Code Playgroud)

但我怀疑这是可能的.或者,我只想知道如何在命令行中指定项目名称.

msbuild msdeploy command-line-arguments

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

生成报告时诊断.NET OutOfMemoryException

我的任务是改进一段代码,以任何我认为合适的方式生成大量报告.

生成了大约10个相同的报告(对于数据库的每个"部分"),它们的代码与此类似:

GeneratePurchaseReport(Country.France, ProductType.Chair);
GC.Collect();
GeneratePurchaseReport(Country.France, ProductType.Table);
GC.Collect();
GeneratePurchaseReport(Country.Italy, ProductType.Chair);
GC.Collect();
GeneratePurchaseReport(Country.Italy, ProductType.Table);
GC.Collect();
Run Code Online (Sandbox Code Playgroud)

如果我删除这些GC.Collect()呼叫,报告服务将崩溃OutOfMemoryException.

大部分内存保存在一个List<T>内部,GeneratePurchaseReport并且一旦退出就不再使用 - 这就是为什么完整的GC集合将回收内存.

我的问题是双重的:

  1. 为什么GC不能单独执行此操作?一旦它在第二个内存耗尽,GeneratePurchaseReport它应该在崩溃和刻录之前进行完整的收集,不应该吗?
  2. 是否存在内存限制,我可以以某种方式提出?我根本不介意将数据交换到磁盘,但.net进程使用的内存远远少于可用的2.5GB内存!我希望它只会在地址空间耗尽时崩溃,但在64位机器上我怀疑这种情况发生得如此之快.

.net memory

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

卸载时如何删除设置

我的程序安装了Visual Studio安装项目.该程序在运行时会user.config在默认位置创建一个文件,因为我正在使用"设置".uninsalling时,如何让卸载程序删除该user.config文件?另外,如何让卸载程序删除文件夹%AppData%

uninstall setup-project application-settings

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

捕获StackOverflowException

我该怎么抓StackOverflowException

我有一个允许用户编写脚本的程序,当运行任意用户代码时,我可能会得到一个StackOverflowException.运行用户代码的部分显然是用try- 包围的catch,但是在正常情况下堆栈溢出是无法捕获的.

我环顾四周,是我能找到的最丰富的答案,但仍然让我陷入了死胡同; 从BCL团队博客中一篇文章中我发现,我应该使用RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup调用代码和代理,即使在堆栈溢出后也会调用它,但是在尝试时,进程会终止堆栈溢出消息,而代理不会被调用.我已经尝试添加PrePrepareMethodAttribute处理程序方法,但没有改变任何东西.

我也尝试使用AppDomain并处理事件UnhandledExceptionDomainUnload事件 - 但整个进程在堆栈溢出时被杀死.即使我throw new StackOverflowException();手动而没有得到实际的堆栈溢出,也会发生同样的情况.

c# stack-overflow

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

为什么对齐有意义?

我知道有些处理器因数据未对齐而失败,而其他处理器就像那些常见的x86一样,只会慢得多.

我的问题是为什么?为什么x86处理器从指针获取数据0x12345679比从指针获取数据更难0x12345678?为了清楚起见,我知道如果数据在多个页面中可能会发生页面错误,并且我知道可能需要从内存中获取更多数据(一个部分用于值的开始,一个用于结束) ,但这并不总是正确的,这不是我的问题所在.我问,为什么总是慢?

假设内存开始于0x10000000.为什么处理器比short0x10000001它获取2字节更难0x10000002?为什么更难获得一个4字节int0x10000001比它是从0x10000000?等等.

cpu byte alignment

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

创建 ILookup

我有一个由一些复杂表达式生成的 ILookup。假设这是按姓氏查找人。(在我们简单化的世界模型中,姓氏在家庭中是唯一的)

ILookup<string, Person> families;
Run Code Online (Sandbox Code Playgroud)

现在我有两个疑问,我对如何构建感兴趣。

首先,我如何按姓氏过滤?

var germanFamilies = families.Where(family => IsNameGerman(family.Key));
Run Code Online (Sandbox Code Playgroud)

但这里germanFamilies有一个IEnumerable<IGrouping<string, Person>>; 如果我调用ToLookup()它,我最好打赌会得到一个IGrouping<string, IGrouping<string, Person>>. 如果我想聪明点,SelectMany先打电话,我最终会发现计算机做了很多不必要的工作。如何轻松地将这个枚举转换为查找?

其次,我只想查询成年人的信息。

var adults = families.Select(family =>
         new Grouping(family.Key, family.Select(person =>
               person.IsAdult())));
Run Code Online (Sandbox Code Playgroud)

在这里,我面临两个问题:Grouping类型不存在(除了作为 的内部内部类Lookup),即使存在,我们也会遇到上面讨论的问题。

那么,除了完全实现 ILookup 和 IGrouping 接口,或者让计算机做大量愚蠢的工作(重新分组已经分组的内容)之外,是否有办法改变现有的 ILookups 以生成我错过的新 ILookups?

linq ilookup

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

C#优化和副作用

C#编译器或JITter可以进行优化会产生明显的副作用吗?

我已经离开了一个例子.

var x = new Something();
A(x);
B(x);
Run Code Online (Sandbox Code Playgroud)

当调用A(x) x是保证,更让在2002年底A-因为B使用相同的参数.但如果B被定义为

public void B(Something x) { }
Run Code Online (Sandbox Code Playgroud)

然后B(x)可以通过优化器消除,然后GC.KeepAlive(x)可能需要调用.

这个优化实际上可以由JITter完成吗?

除了堆栈跟踪更改之外,是否存在可能具有可见副作用的其他优化?

c# optimization jit

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

停用Chrome开发者工具的$功能

Chrome开发者工具定义了一个方便的$功能(以及一些其他便利).但是,当使用jQuery时,它很方便$ = jQuery.是否可以禁用Chrome的自动$定义功能而不禁用更方便的定义(如$0)?

jquery google-chrome developer-tools

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

JavaScript 重新抛出一个保留堆栈跟踪的异常

在 Chrome 中,当发生异常时,它会将堆栈跟踪打印到控制台日志。这非常有用,但不幸的是,在重新抛出异常的情况下,这会导致问题。

} catch (e) {
    if (foo(e)) {
        // handle the exception
    } else {
        // The stack traces points here
        throw e;
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,jQuery.js如果它们来自内部事件处理程序,以下代码会导致所有异常都出现此问题。

try {
    while( callbacks[ 0 ] ) {
        callbacks.shift().apply( context, args );
    }
}
// We have to add a catch block for
// IE prior to 8 or else the finally
// block will never get executed
catch (e) {
    throw e;
}
finally {
    fired = [ context, …
Run Code Online (Sandbox Code Playgroud)

javascript stack-trace throw

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

为什么将名称'op_Addition'用于运算符'+'而不是名称'+'?

当您重载运算符时,例如operator +,编译的CIL看起来像这样:

.method public hidebysig specialname static bool op_Addition(...) { ... }
Run Code Online (Sandbox Code Playgroud)

为什么在op_Addition这里使用名称而不是名称+

我建议应该使用CIL语法

.method public hidebysig specialname static bool +(...) { ... }
Run Code Online (Sandbox Code Playgroud)

成员名字在寻找时,本来就+不是op_Addition.

注意:这是关于语言设计的问题; "因为规范这么说"并不是一个有用的答案.

c# cil

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