邪恶还是不邪恶?
public static void Raise(this EventHandler handler, object sender, EventArgs args)
{
if (handler != null)
{
handler(sender, args);
}
}
// Usage:
MyButtonClicked.Raise(this, EventArgs.Empty);
// This works too! Evil?
EventHandler handler = null;
handler.Raise(this, EVentArgs.Empty);
Run Code Online (Sandbox Code Playgroud)
请注意,由于扩展方法的性质,如果MyButtonClicked为null,MyButtonClicked.Raise将不会抛出NullReferenceException.(例如,没有MyButtonClicked事件的监听器).
邪恶与否?
在浏览某个项目的代码时,我遇到了以下声明:
++x %= 10;
Run Code Online (Sandbox Code Playgroud)
这个陈述是用C++很好地定义的,还是属于同一类别
a[i] = i++
Run Code Online (Sandbox Code Playgroud)
?
直到两天前,我能够通过右键单击我的项目并单击上下文菜单上的"发布"按钮来使用Visual Studio 2010的"发布Web"选项.现在当我尝试做同样的事情时,我得到以下输出:
------ Build started: Project: ELMS, Configuration: Debug Any CPU ------
Build started 8/1/2011 3:08:03 PM.
GenerateTargetFrameworkMonikerAttribute:
Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are
up-to-date with respect to the input files.
_CopyOutOfDateSourceItemsToOutputDirectoryAlways:
Copying file from "C:\SVN\TrakNet\trunk\MTS\lib\Newtonsoft.Json.Net35.dll" to
"bin\lib\Newtonsoft.Json.Net35.dll".
CopyFilesToOutputDirectory:
LMS -> C:\SVN\TrakNet\trunk\MTS\bin\LMS.dll
Build succeeded.
Time Elapsed 00:00:00.04
------ Publish started: Project: LMS, Configuration: Debug Any CPU ------
Object reference not set to an instance of an object.
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用新的发布配置文件支持(在VS2012和VS2010中通过更新提供)来创建连续交付"部署管道",从而在第一个"阶段"中创建包/ zip并且相同的包是使用不同的配置部署到各种环境.
使用pubxml文件中定义的设置从命令行部署现有软件包涉及哪些任务/属性,而不会导致构建?换句话说,我想"发布"到一个包,然后将相同的包"发布"到另一个配置文件而不重建它.
(我知道我可以直接使用MSDeploy,但如果可能的话,我更愿意在每个项目上使用更少的管道)
当我拉:
E325: ATTENTION
Found a swap file by the name "~/Documents/Sites/recipegenerator/.git/.MERGE_MSG.swp"
owned by: username dated: Wed Dec 14 12:28:45 2016
file name: ~username/Documents/Sites/recipegenerator/.git/MERGE_MSG
modified: YES
user name: username host name: Users-MacBook-Pro.local
process ID: 33747
While opening file "/Users/larsvanurk/Documents/Sites/recipegenerator/.git/MERGE_MSG"
dated: Thu Dec 22 14:06:17 2016
NEWER than swap file!
(1) Another program may be editing the same file.
If this is the case, be careful not to end up with two
different instances of the same file when making changes.
Quit, …
Run Code Online (Sandbox Code Playgroud) 我试图从命令行调用MSBuild.当我使用没有空格的路径时,一切都工作正常,但现在我有一个有空格的路径,命令失败.
命令(作品):
"C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe"
/t:Rebuild "C:\Projects\myProject.csproj"
/p:OutDir=c:\temp\deploy\funAndGames\Deployment\bin\
/p:WebProjectOutputDir=c:\temp\deploy\funAndGames\Deployment\
/p:Configuration=Release
Run Code Online (Sandbox Code Playgroud)
然后我添加了引号并将OutDir更改为OutPath(不起作用):
"C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe"
/t:Rebuild "C:\Projects\myProject.csproj"
/p:OutPath="c:\temp\deploy\funAndGames\Deployment\bin\"
/p:WebProjectOutputDir="c:\temp\deploy\funAndGames\Deployment\"
/p:Configuration=Release
Run Code Online (Sandbox Code Playgroud)
我的目标是这样的(不起作用):
"C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe"
/t:Rebuild "C:\Projects\myProject.csproj"
/p:OutPath="c:\temp\deploy\fun and games\Deployment\bin\"
/p:WebProjectOutputDir="c:\temp\deploy\fun and games\Deployment\"
/p:Configuration=Release
Run Code Online (Sandbox Code Playgroud)
有关空格的OutDir/OutPath和WebProjectOutputDir语法的任何帮助?可能吗?如果不是,有人知道原因是什么(由于一些Url没有空格类型的东西?)
我需要一种方法来设置异步任务,因为长时间运行而不使用Task.Factory.StartNew(...)而是使用Task.Run(...)或类似的东西.
语境:
我有连续循环的任务,直到它被外部取消,我想设置为'长时间运行'(即给它一个专用的线程).这可以通过以下代码实现:
var cts = new CancellationTokenSource();
Task t = Task.Factory.StartNew(
async () => {
while (true)
{
cts.Token.ThrowIfCancellationRequested();
try
{
"Running...".Dump();
await Task.Delay(500, cts.Token);
}
catch (TaskCanceledException ex) { }
} }, cts.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default);
Run Code Online (Sandbox Code Playgroud)
问题是Task.Factory.StartNew(...)不返回传入的活动异步任务,而是返回"运行Action的任务",其功能上始终具有taskTatus的'RanToCompletion'.由于我的代码需要能够跟踪任务的状态以查看它何时变为"已取消"(或"故障"),我需要使用以下内容:
var cts = new CancellationTokenSource();
Task t = Task.Run(
async () => {
while (true)
{
cts.Token.ThrowIfCancellationRequested();
try
{
"Running...".Dump();
await Task.Delay(500, cts.Token);
}
catch (TaskCanceledException ex) { }
} }, cts.Token);
Run Code Online (Sandbox Code Playgroud)
Task.Run(...),根据需要,返回异步过程本身,允许我获得'已取消'或'故障'的实际状态.但是,我无法将任务指定为长时间运行.那么,任何人都知道如何最好地运行异步任务,同时存储该活动任务本身(使用所需的taskStatus)并将任务设置为长时间运行?
我在Visual Studio 2010中使用WiX 3.5.1930,目标是.NET Framework 3.5.(后来每周构建的WiX似乎在其自定义操作模板方面非常破碎,至少目前是这样.1930年是最近的构建,似乎使可构建的C#CA具有工作引用.)
我有两个用C#编写的自定义动作程序集.其中一个工作正常.另一个失败,出现以下错误:
CustomActionnNameHere returned actual error code 1154 (note this may not be 100% accurate if translation happened inside sandbox)
Run Code Online (Sandbox Code Playgroud)
我已经比较了.csproj文件和.wixproj文件,并且我可以告诉它们差异是合适的(例如包含.cs文件的列表).我已经更改了非工作的.wxs来调用工作自定义操作而不是非工作自定义操作,它可以作为epxected.
我还能看到什么让这个工作?
编辑:只是要完成1154指的是一个无效的DLL - net helpmsg将它(英文)翻译为"运行此应用程序所需的库文件之一已损坏".
第二个编辑:跑peverify对DLL(抓住一个副本出\窗口\安装程序在安装程序正在运行),它说一切都在DLL罚款.DLL只有自定义操作方法,并且"返回成功",因此验证它并不是很多,但它确实证实DLL没有损坏.
第三次编辑:损坏的自定义操作中的代码如下:
using Microsoft.Deployment.WindowsInstaller;
namespace Framework.Installer.Database {
public class CustomActions {
[CustomAction]
public static ActionResult RunMigration(Session session) {
return ActionResult.Success;
}
}
}
Run Code Online (Sandbox Code Playgroud)
不是很多..wxs的相关部分如下:
<InstallExecuteSequence>
<Custom Action="DotNetMigratorCustomActionPreviousUp" After="SetMigrationPropertiesPreviousUp"><![CDATA[(&Database = 3)]]></Custom>
</InstallExecuteSequence>
<Binary Id="DotNetMigratorCustomActionDll"
SourceFile="$(var.Framework.Installer.Database.CustomActions.TargetDir)\SoftwareAnswers.Framework.Installer.Database.CustomActions.dll" />
<CustomAction Id="DotNetMigratorCustomActionPreviousUp"
Return="check"
BinaryKey="DotNetMigratorCustomActionDll"
DllEntry="RunMigration"
Execute="deferred" />
Run Code Online (Sandbox Code Playgroud) 我正在使用Burn for MSIs包.我正在使用Votive(Visual Studio)和我自己的自定义BA而不是WiXBA.我尝试使用调试自定义BA Debugger.Launch()
.但是当我开始调试时,会出现错误消息.
没有为任何调用堆栈帧加载符号.源代码无法显示
我意识到package.exe链接了位于的CustomBA dll C:\Documents and Settings\user\Local Settings\Temp\{GUID}\
.{GUID}
总是改变.因此,每当我运行package.exe时,总是会更改目录.
我认为这是发生错误的原因.
在Visual Studio中,当我使用CustomBA dll启动package.exe时,它位于绝对路径(.../Debug/bin/CustomBA.dll
).但是在执行package.exe之后,它会链接到Local Settings\Temp\{GUID}
目录.因此,当我们开始调试并附加到CustomBA dll时,CustomBA dll的目录会动态更改并No symbols are loaded
发生错误.
C:\Documents and
Settings\user\Local Settings\Temp\{GUID}\
?我们可以静态选择dll的路径吗?我有一个包含数千个字符串的C#List:
"2324343"
"6572332"
"45122" ...
Run Code Online (Sandbox Code Playgroud)
我想用它们周围的括号替换所有这些,所以它们看起来像
"(2324343)"
"(6572332)"
"(45122)" ...
Run Code Online (Sandbox Code Playgroud)
我知道如何编写for循环并执行此操作,但我想知道是否有办法优先使用LINQ和LAMBDA表达式.我也对其他建议持开放态度.
非常感谢!