我在一个解决方案中有两个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)
但我怀疑这是可能的.或者,我只想知道如何在命令行中指定项目名称.
我的任务是改进一段代码,以任何我认为合适的方式生成大量报告.
生成了大约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集合将回收内存.
我的问题是双重的:
GeneratePurchaseReport它应该在崩溃和刻录之前进行完整的收集,不应该吗?我的程序安装了Visual Studio安装项目.该程序在运行时会user.config在默认位置创建一个文件,因为我正在使用"设置".uninsalling时,如何让卸载程序删除该user.config文件?另外,如何让卸载程序删除文件夹%AppData%?
我该怎么抓StackOverflowException?
我有一个允许用户编写脚本的程序,当运行任意用户代码时,我可能会得到一个StackOverflowException.运行用户代码的部分显然是用try- 包围的catch,但是在正常情况下堆栈溢出是无法捕获的.
我环顾四周,这是我能找到的最丰富的答案,但仍然让我陷入了死胡同; 从BCL团队博客中的一篇文章中我发现,我应该使用RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup调用代码和代理,即使在堆栈溢出后也会调用它,但是在尝试时,进程会终止堆栈溢出消息,而代理不会被调用.我已经尝试添加PrePrepareMethodAttribute处理程序方法,但没有改变任何东西.
我也尝试使用AppDomain并处理事件UnhandledException和DomainUnload事件 - 但整个进程在堆栈溢出时被杀死.即使我throw new StackOverflowException();手动而没有得到实际的堆栈溢出,也会发生同样的情况.
我知道有些处理器因数据未对齐而失败,而其他处理器就像那些常见的x86一样,只会慢得多.
我的问题是为什么?为什么x86处理器从指针获取数据0x12345679比从指针获取数据更难0x12345678?为了清楚起见,我知道如果数据在多个页面中可能会发生页面错误,并且我知道可能需要从内存中获取更多数据(一个部分用于值的开始,一个用于结束) ,但这并不总是正确的,这不是我的问题所在.我问,为什么总是慢?
假设内存开始于0x10000000.为什么处理器比short从0x10000001它获取2字节更难0x10000002?为什么更难获得一个4字节int从0x10000001比它是从0x10000000?等等.
我有一个由一些复杂表达式生成的 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?
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完成吗?
除了堆栈跟踪更改之外,是否存在可能具有可见副作用的其他优化?
Chrome开发者工具定义了一个方便的$功能(以及一些其他便利).但是,当使用jQuery时,它很方便$ = jQuery.是否可以禁用Chrome的自动$定义功能而不禁用更方便的定义(如$0)?
在 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) 当您重载运算符时,例如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.
注意:这是关于语言设计的问题; "因为规范这么说"并不是一个有用的答案.