我注意到当MSBuild失败时,$ LastExitCode变量的值始终为0.我在Windows 7上,使用MSBuild v4.0和PowerShell 2.0.这是我的MSBuild scritpt:
<?xml version="1.0" encoding="UTF-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0" DefaultTargets="Fail">
<Target Name="Fail">
<Error />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
当我跑:
msbuild.exe MyProject.csproj
Run Code Online (Sandbox Code Playgroud)
我可以在输出中看到MSBuild失败,但是当我检查时$LastExitCode,它的值为0.任何人都知道可能会发生什么?
我试过设置$(ErrorActionPreference)到Stop,但没有奏效.我重新打开了一个新的PowerShell窗口,它也没有用.
当可执行文件写入标准错误流(stderr)时,PowerShell控制台和PowerShell ISE的行为会有所不同.控制台(powershell.exe)将其显示为标准输出.例如,当我在非存储库上获得Mercurial的状态时,它会写入标准错误:
> hg st -R C:\Windows
abort: repository C:\Windows not found!
Run Code Online (Sandbox Code Playgroud)
但是,在PowerShell ISE(powershell_ise.exe)中,该错误将传递给PowerShell的Write-Errorcmdlet:
> hg st -R C:\Windows
hg.exe : abort: repository C:\Windows not found!
At line:1 char:3
+ hg <<<< st -R C:\Windows
+ CategoryInfo : NotSpecified: (abort: repository C:\Windows not found!:String) [], RemoteExcepti
on
+ FullyQualifiedErrorId : NativeCommandError
Run Code Online (Sandbox Code Playgroud)
有没有办法将ISE配置为像控制台一样,而不是将stderr流发送到Write-Error?
Visual Studio 2017附带了自己的Git版本.不幸的是,它不支持SSH,并且它不包括发行者的根证书,用于保护我们的存储库的SSL证书.因此,每当我们尝试克隆,拉动或推送时,我们都会收到此错误:
克隆远程存储库时遇到错误:Git失败并出现致命错误.致命:无法访问"https://********/":SSL证书问题:无法获取本地颁发者证书
看起来Visual Studio 2017附带了自己的Git版本.最新版本的Git,2.12.2通过在验证SSL证书时添加对查看Windows证书存储区的支持来修复上述问题.反正有没有配置Visual Studio使用全球安装的Git版本?如果解决方案适用于Visual Studio版本,则可获得奖励积分.
您好我能够使用Wmi执行远程进程,并能够获得进程的返回值和进程ID.有没有办法获得由Wmi开始的过程输出.例如.如果我启动一个exe在控制台中打印的东西,我将能够使用此Api获取这些值.任何帮助表示赞赏.
我们有一些单元测试,其中嵌入了PFX证书。这些证书在测试执行期间被读取并变成X509Certificate2对象。不幸的是,当以非特权用户身份运行时,我们会遇到以下Access Denied异常:
using (var s = EmbeddedResourceUtilities.GetEmbeddedResourceAsStream(typeThatContainsEmbeddedResource, certFileName))
{
if (s == null)
{
throw new ApplicationException(String.Format("Embedded certificate {0} for type {1} not found.", certFileName, typeThatContainsEmbeddedResource.FullName));
}
try
{
var bytes = new byte[s.Length];
s.Read(bytes, 0, (int)s.Length);
return new X509Certificate2(bytes);
}
catch (Exception ex)
{
throw new ApplicationException(String.Format("Error loading embedded certificate {0} for type {1}.", certFileName, typeThatContainsEmbeddedResource.FullName), ex);
}
}
Run Code Online (Sandbox Code Playgroud)
这是例外:
System.Security.Cryptography.CryptographicException:访问被拒绝。
在System.Security.Cryptography.CryptographicException.ThrowCryptographicException(的Int32小时)
在System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob(字节[] RAWDATA,IntPtr的密码,UInt32的dwFlags中,布尔persistKeySet,SafeCertContextHandle&pCertCtx)
在System.Security.Cryptography .X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte [] rawData,对象密码,X509KeyStorageFlags keyStorageFlags),
位于System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte [] rawData)
我试图修改构造函数以使用空密码和显式键集标志,但这不能解决问题:
// this …Run Code Online (Sandbox Code Playgroud) 我们所有的Jenkins作业都配置为在存储库中的所有分支上构建更改.有时我们想要重新运行针对特定提交运行的特定构建.
然而,Jenkins的"立即构建"命令构建在最后一个构建的分支上.它不允许用户选择要构建的分支.为了重建分支,用户必须提交并推送对该分支的更改.
是否有一个允许用户重新运行特定版本或选择要构建的分支的插件?如果你使用过TeamCity,我想要"重新运行相同的版本"功能.
我们尝试过Naginator和Rebuilder插件.Naginator只允许您重建失败的构建,但也会自动重新构建失败的构建至少一次(不可取).Rebuilder始终重建最后一次提交.它的行为就像"立即构建"按钮.
我有一个PowerShell脚本,可以找到将两个命名分支合并在一起的修订版.它遍历特定分支上的所有合并,显示在另一个命名分支上具有父级的变更集.
有没有相同的hg log命令?我玩过Mercurial的revsets功能(hg help revsets),但似乎无法找到神奇的咒语.
我正在编写一个使用第三方库的PowerShell脚本.我正在使用的一个对象要求我添加一个事件处理程序. 事件委托如下所示:
public delegate void TSBPGPCreateOutputStreamEvent(object Sender,
string Filename,
System.DateTime TimeStamp,
ref System.IO.Stream Stream,
ref bool FreeOnExit)
Run Code Online (Sandbox Code Playgroud)
在PowerShell中,我试过这样做:
$reader.Add_OnCreateOutputStream( {
param(
$sender,
$fileName,
$timestamp,
[ref]
$stream,
[ref]
$freeOnExit
)
$stream = New-Object IO.MemoryStream
} )
Run Code Online (Sandbox Code Playgroud)
但我收到此错误消息:
Cannot convert value "
param(
$sender,
$fileName,
$timestamp,
[ref]
$stream,
[ref]
$freeOnExit
)
$stream = New-Object IO.MemoryStream
" to type "SBPGP.TSBPGPCreateOutputStreamEvent".
Error: "The type 'System.IO.Stream&' may not be used as a type argument."
Run Code Online (Sandbox Code Playgroud)
订阅活动有更好的方法吗?为什么Stream类型不能用作类型参数?我究竟做错了什么?
当我使用aspnet_compiler.exe预编译我的网站时,我看到了一个cvtres.exe进程csc.exe.我假设这是.NET编译过程的一部分,并且在编译我的.NET程序集时也会显示.它是什么cvtres.exe以及它做了什么?
我知道已经有一些堆栈溢出问题,但我已经尝试了很多解决方案并且不断出现同样的错误.问题是这样的:
我有2个数组(每个索引代表一个文件夹)
$originDirsArr = @(2, 257, 256, 3, 4, 10)
$tempDirArr = @(2, 257, 256, 3, 4)
Run Code Online (Sandbox Code Playgroud)
我想再次比较$ arr2 $ arr1,如果$ arr1中有东西不在$ arr2中,则删除它.即,在这种情况下,$ arr2中的10个DNE,因此该文件夹应该被删除.
这是我尝试过的:
$c = Compare-Object -ReferenceObject ($originDirsArr) `
-DifferenceObject ($tempDirArr) -Passthru
$c
Run Code Online (Sandbox Code Playgroud)
也:
while ($t -lt $originDirsArr.length){
$originDirsArr[$t]
if ( $tempDirArr -notContain $originDirsArr[$t]){
"$_ does not exist in original and needs to be deleted"
}else{
"$_ does still exist in the temp"
}
$t++
}
Run Code Online (Sandbox Code Playgroud)
最后:
Compare-Object $originDirsArr $tempDirArr | ForEach-Object { $_.InputObject }
Run Code Online (Sandbox Code Playgroud)
每次我不断得到某种错误,无论是ReferenceObject还是DifferenceObject都是null.我知道它不是null因为我可以打印出内容,即使在那个例子中在t上编入索引,我仍然有内容.
在先进的感谢,任何帮助将不胜感激!