对于像-WhatIf这样的东西,我们有[CmdletBinding]属性给我们的$ PSCmdlet.ShouldProcess().是否有其他此类工具或实践来实现常见的命令行参数,如-Verbose,-Debug,-PassThru等?
debugging powershell passthru command-line-arguments verbose
我正在与一些同事计划一个侧面项目,但不是每个人都有许可证.我们正在考虑发布适用于Windows 8/8.1和Windows Phone 8平台的应用程序.我没有很多使用Express版本的经验,但由于某些原因,Visual Studio Express 2013 for Windows Phone似乎在他们的网站上不存在,但没有任何解释.我想知道是否有人知道Windows Phone是否开发:
visual-studio-express windows-phone visual-studio-2013 windows-8.1
我已经在我的Tfs2010实例上运行了CI构建,但是我还希望运行一个Gated checkin构建.但是,我希望这两个构建运行的方式之间存在细微差别.具体来说,我希望Gated checkin不会在失败时产生bug工作项,不会在构建时关联变更集和工作项,不会将构建移动到drop,也不会维护以前的构建.由于Gated checkins启动的构建是未提交的更改,因此这些步骤对我来说似乎没有必要,但我绝对希望CI构建能够执行这些功能.
不幸的是,这些NO_CI事件在我们的更改集中出现后,它们被Gated Checkin构建提交,并且CI构建永远不会被触发.我发现这个线程似乎表明我的DefaultTemplate.xaml应该在那里有一个"Get Activity"NO_CIOption参数; 但是配置文件中没有任何内容似乎表明任何类型.两个字符串都不存在,我在msdn库中找不到任何参考文档.
事实上,在msdn库中,有一个页面似乎链接到我想要的页面,但是链接实际上是一个错位的重复链接"控制构建系统放置二进制文件的位置".您可以在其下方看到相同的链接.
无论如何:构建模板文件中如何使用NO_CIOption参数?放在哪里?以前没有其他人想要这样做吗?
旁注:在SO和MSDN论坛之间交叉发帖是不好的做法?
大约一年前问了一个类似的问题并回答了问题,但这个问题要么是一个不同的问题(一切都处于测试阶段),要么被误诊.它位于此处:MSbuild任务失败,因为"任何CPU"解决方案是按顺序构建的.
我的问题是我有一个wix安装程序项目,并且在星期一升级到Tfs2010后,构建在链接时失败,因为它无法在项目中找到Wpf应用程序的构建产品.经过一番挖掘,这是因为它还没有建成.Vs2010中的建筑工作正常.wix项目设置为依赖于Wpf项目,在IDE中查看Project Build Order时,一切看起来都很正常.
最初只遇到解决方案中的两个平台定义就遇到了这个问题; x86和x64.还有两种版本,Debug和Release,TFSBuild.proj设置为构建所有四种组合.任何地方都没有AnyCPU.根据上面引用的问题,我尝试更改Wpf项目以使用AnyCPU,以便首先构建它.此时,wix项目使用了确切的配置,Wpf项目使用了AnyCPU的flavor.但是,这样做似乎没有任何改变.
我正在使用Tfs2010 RTM,Vs2010 RTM和最新版本的Wix,在撰写本文时为2010年1月2日的3.5.1602.0.其他人遇到这个?
2010-04-27:在克隆的VM构建机器上进行了大量的挖掘和再现之后,我相信我知道发生了什么以及发生了什么失败,但我不知道如何解决它.
情况是,这个错误似乎表现出基于解决方案文件中纯粹的运气抽奖项目排序的症状.似乎解决方案文件只是按照它们出现的顺序盲目地构建项目,依赖于它能够检测未构建的引用并在需要时根据需要构建它们.
在我的特定解决方案文件中,我的Wix项目是在我的Wpf应用程序项目之前订购的.这导致了维克斯项目中第一个建成,而被正确检测到对WPF项目的依赖,实际MSBuild任务被跳过,因为未定义$(BuildProjectReferences)可变的我提了几个意见下来,从这个主哨线.随着MSBuild的详细程度仍然在诊断,BuildProjectReferences可以看作是不确定的建设维克斯项目,可以看出定义在建设任务中的WPF项目打造的维克斯项目为真.然而,在测试时,它再次评估undefined,跳过任务,并且Wix构建失败,因为它无法找到未构建的Wpf项目的构建输出.
所以底线:由于错误的$(BuildProjectReferences)变量而跳过了项目依赖项.有趣的是,此变量仅存在于Wix2010.targets文件中,而不存在于wix.targets中; 我猜这就是为什么在我安装Tfs2010和Vs2010之后就出现了这个问题.
解决方案:如何确保将BuildProjectReferences正确传递给后续的MSBuild任务?变量范围有什么特别之处吗?
2010-09-14:一个错误是打开这一问题在WiX的工具集:http://sourceforge.net/tracker/?func=detail&atid=642714&aid=2990231&group_id=105970和固定前一阵子.希望这不再是一个问题.如果是这样,请打开一个新的错误.
为了直接解决您的评论,我的解决方案中没有任何内容在其构建文件中具有AnyCPU配置.我创建AnyCPU配置只是为了测试我在原始帖子中链接到的线程所建议的解决方案.在它不起作用后,我再次删除了AnyCPU配置.
此外,项目在同一个解决方案文件中,但是在单独的解决方案文件夹(界面文件夹,安装程序文件夹)中,如果这很重要.
有趣的是,我打算制作一个小沙箱示例,以便我可以说明我遇到的问题,但是在创建我的小样本解决方案后,我无法重现错误.这让我觉得,也许这是使用从一个Tfs2008团队项目升级,而不是在TFS2010创建一个新的团队项目的结果.如果我无法弄清楚测试解决方案的工作原理,我可以尝试将我的项目分支到一个新项目来测试这个理论.
ps也,我是stackoverflow的新手 - 如果"回答你自己的问题"工作流程只是为了提供具体的答案,为什么地球上的评论篇幅有限?
因此,我将构建详细程度提升到诊断状态并在今天阅读,特别是一条线对我来说很突出:
Task "MSBuild" skipped, due to false condition; ('@(_ProjectReferenceWithConfiguration)'!='' and '$(BuildingInsideVisualStudio)' != 'true' and '$(BuildProjectReferences)' == 'true' and '@(_MSBuildProjectReferenceExistent)' != '') was evaluated as ('..\WpfApp\WpfApp.csproj'!='' and '' != 'true' and '' == 'true' and '..\WpfApp\WpfApp.csproj' != '').
Run Code Online (Sandbox Code Playgroud)
这被视为我的安装程序项目试图构建我的wpf项目,因为引用了wpf项目.特别是,出于某种原因,$(BuildProjectReferences)正在评估''当我非常确定它应该是'真'时.
但是在日志的早期,在WpfApp项目的MSBuild任务开始时,我看到了:
Task "MSBuild" (TaskId:15)
...
Initial Properties:
...
BuildProjectReferences = true
Run Code Online (Sandbox Code Playgroud)
所以在任务开始之前,该属性确实是正确的,但后来显然被覆盖了?关于如何设置这些属性,我有点不清楚.
我正在尝试使用在Windows Server 2008 R2 上运行的TFS 2010 将WiX集成到我的自动构建解决方案中.一切似乎都很简单,然后我明白了:
light.exe:执行ICE操作'ICE01'时出错.这种ICE故障的最常见原因是错误注册的脚本引擎.有关详细信息以及如何解决此问题,请参见http://wix.sourceforge.net/faq.html#Error217.外部UI消息记录器不期望以下字符串格式:"无法访问Windows Installer服务.如果未正确安装Windows Installer,则会发生这种情况.请联系您的支持人员以获取帮助."
那很奇怪.但是嘿!他们提供了一个链接.这应该有帮助,对吗?
错误LGHT0217
在WiX v3中,Light会自动运行验证 - Windows Installer内部一致性评估程序(ICE) - 每次成功构建之后.验证是捕获可能导致服务问题的常见创作错误的好方法,这就是为什么它现在默认运行的原因.不幸的是,Windows Vista和Windows Server 2008上存在一个可能导致ICE失败的常见问题.有关原因及其解决方法的详细信息,请参阅Heath Stewart的博客和Aaron Stebner的WebLog.
一点也不.这些帖子只描述了涉及脚本引擎注册的情况,并且它们描述的条件不存在.然而,我遇到了Re :( WiX用户)为什么我从serviceaccount建立ICE失败?(2010-01-14)似乎表明,如果我使用域帐户运行Windows Installer服务,它将起作用.这听起来像是值得一试.
"无论出于何种原因,在Windows 2008上(我没有测试Vista,XP,2003,7或2008 R2),MSI服务只能从具有管理访问权限或登录为"交互式"的登录中获得.登录是从没有管理权限的服务帐户无法访问msi服务,因此无法运行ICE测试."
但是,尝试使用我的构建服务帐户启动Windows Installer服务时:
Windows无法在SKILLET-1上启动Windows Installer服务.错误1297:服务帐户配置中不存在服务正常运行所需的权限.您可以使用服务Microsoft管理控制台(MMC)管理单元(services.msc)和本地安全设置MMC管理单元(secpol.msc)来查看服务配置和帐户配置.
好的,Windows,所以你告诉我,我的构建服务帐户缺少启动服务所需的一些模糊权限.让管理员应该解决这个问题吗?不,这也不起作用.
所以我恢复到Windows Installer服务帐户的本地系统.这次我使构建服务成为本地管理员,并且成功!但这不是解决方案.
我的下一个想法是尝试隔离构建服务实际需要的权限集来完成这项工作.这将是一个很好的解决方案,而不必向管理员集添加更多帐户.步骤1:进入本地安全策略并将构建服务帐户添加到当前授予管理员的所有权限.从理论上讲,这应该允许构建成功,从那里我可以有选择地删除权限,直到我已经隔离了必须持有的所有权限才能成功.
不幸的是,即使具有所有相同的权限,除非构建服务帐户是本地管理员的成员,否则构建仍将失败.为什么是这样?除LSP之外还有哪些其他东西依赖于我可以更改的管理员组,以使我的构建服务帐户与管理员等效?
当前结论:构建服务必须是管理员才能避免ICE验证错误.
开放式问题:
Error 1297Windows Installer服务作为域用户运行时,抛出的这个神秘是什么?几乎没有我能找到的文件.假设您有一个表示错误代码的枚举.将有几个代码,每个代码都有自己的底层int值; 但是,获取默认值0的枚举值似乎应该仔细考虑.
在错误代码枚举的情况下,我可以想到两个特殊值:无(对于没有错误的情况)和未知(对于没有现有错误代码的情况,或者甚至当错误状态不能被发现).
其中一个值似乎应该为0,其他值可能会得到其他类似-1的值.将None值设置为0或将Unknown值设置为0更合适吗?
public enum ErrorCode
{
None = -1,
Unknown = 0,
InsufficientPermissions,
ConnectivityError,
...
}
public enum ErrorCode
{
Unknown = -1,
None = 0,
InsufficientPermissions,
ConnectivityError,
...
}
Run Code Online (Sandbox Code Playgroud)
我的直觉告诉我默认应该是未知,但我很好奇是否有人做了不同的事情.
似乎三元运算符中存在某种类型的混淆.我知道这已经在其他SO线程中得到了解决,但它始终是无效的.另外,对于我的情况,我真的只是在寻找更好的方法.
我希望能够使用
proc.Parameters[PARAM_ID].Value =
string.IsNullOrEmpty(dest.Id) ? DBNull.Value : dest.Id;
Run Code Online (Sandbox Code Playgroud)
但相反,我坚持这个:
if (string.IsNullOrEmpty(dest.Id))
{
proc.Parameters[PARAM_ID].Value = DBNull.Value;
}
else
{
proc.Parameters[PARAM_ID].Value = dest.Id;
}
Run Code Online (Sandbox Code Playgroud)
三元运算符失败是因为DBNull和字符串之间没有可能的转换,并且看起来很傻,因为值似乎是对象,编译器将它踢回给我,我不得不关心.这个问题的可空版本的答案是将null转换为字符串并完成它; 但是DBNull不能转换成字符串,所以没有运气.
有没有更简洁的方法来做到这一点(顺便说一下,没有使用nullables?)
谢谢!
我正在创建一个脚本来在我的TFS实例中执行大量移动.我有2010 TFS Power Tools提供的tfs cmdlet,但它们的get-help文档非常稀疏.具体来说,Add-TfsPendingChange似乎不支持重命名,这迫使我改为使用"tf.exe rename".
首先:我有没有错过cmdlet的文档?我已尝试使用命令的get-help,但它们不支持-detailed或-examples标志.有什么更多可用吗?
其次:我有什么理由比普通的tf.exe更喜欢任何cmdlet?除了在执行类似功能时通过管道传递对象之外,还有其他好处吗?
我一直对Visual Studio数据库项目很感兴趣,虽然它们看起来很有能力,但我从未在简单的概念验证工作之外使用它们.我想尝试一个新项目,我也有兴趣在它上面使用EF层,但在过去的测试项目中,这涉及一些体面的努力.
我很好奇:Visual Studio是否使其产品集成成熟,以支持构建数据库项目的单个工作流,在其上构建EF层,最后构建代码,而不涉及中间步骤?
我们是一个小团队,我们没有专门的SQL开发人员,我们的主要目标是将数据库引入Visual Studio并在源代码控制(TFS)下很好地实现它,并实现端到端之间的强大集成.我们有兴趣成长为EF,如果可能的话,我们可能会像简单的ORM工具一样对待它.
有没有人真正做到这一点,可以提供对过程的洞察力?
entity-framework build database-project visual-studio visual-studio-2012
我正在使用Powershell处理csproj文件,以执行项目引用的大规模编辑.到目前为止,我已经设法使用以下行编辑ProjectReferences上的Include属性:
$projectXml = [xml](Get-Content $_.Project.FullName)
Add-TfsPendingChange -edit $_.Project.FullName -ErrorAction Stop
$projectXml | Select-Xml -namespace @{msb = "http://schemas.microsoft.com/developer/msbuild/2003"} -xpath "//msb:ProjectReference[msb:Project='$projectGuid']" | Select-Object -ExpandProperty Node | foreach { $_.Include = "$newPath" }
$projectXml.Save($_.Project.FullName)
Run Code Online (Sandbox Code Playgroud)
这可以工作,并按照我的预期替换相应ProjectReferences上的Include属性.但是,还有很多额外的"无害"更改,例如在自己的行上格式化所有标记,例如
<FileUpgradeFlags></FileUpgradeFlags>
变
<FileUpgradeFlags>
</FileUpgradeFlags>
有没有办法执行这样的编辑,没有这些副作用?
编辑:为了清楚任何因其他原因发现此帖子的人,Select-MsBuildXml只是我在Select-Xml周围编写的包装函数,它使用msbuild命名空间预加载namespace参数,然后扩展node属性.
powershell ×3
tfs2010 ×3
tfsbuild ×3
c# ×2
wix ×2
ado.net ×1
build ×1
cmdlets ×1
dbnull ×1
debugging ×1
enums ×1
formatting ×1
passthru ×1
select-xml ×1
side-effects ×1
team-build ×1
tf-cli ×1
tfs ×1
verbose ×1
windows-8.1 ×1
wix3.5 ×1
xml ×1