Tag: msbuild

MSBuild脚本和VS2010发布应用Web.config变换

所以,我已经安装了VS 2010,并且正在修改我们的TeamCity构build集成的MSBuild脚本。 除了一个例外,一切都很好。 我怎样才能告诉MSBuild,我想要应用我发布构build时创build的Web.conifg转换文件… 我有以下产生编译的网站,但是,它输出一个Web.config,Web.Debug.config和Web.Release.config文件(所有3)到编译的输出目录。 在工作室,当我执行一个发布到文件系统它将做转换,只输出与适当的更改的Web.config … <Target Name="CompileWeb"> <MSBuild Projects="myproj.csproj" Properties="Configuration=Release;" /> </Target> <Target Name="PublishWeb" DependsOnTargets="CompileWeb"> <MSBuild Projects="myproj.csproj" Targets="ResolveReferences;_CopyWebApplication" Properties="WebProjectOutputDir=$(OutputFolder)$(WebOutputFolder); OutDir=$(TempOutputFolder)$(WebOutputFolder)\;Configuration=Release;" /> </Target> 任何帮助将是伟大的..! 我知道这可以通过其他方式来完成,但我希望如果可能的话,使用新的VS 2010方法

如何在一个地方为多个应用程序定义应用程序版本?

我们有一个由众多应用程序组成的系统。 所有应用程序的版本都在同一时间更改。 目前,当我们发布一个新版本时,我们必须手动打开每个应用程序的项目选项并逐个更改版本。 有没有办法编译同一版本的所有应用程序,例如,将其保存在全局文件中,并在编译时读取此文件并将该版本分配给项目? 我只是试图消除太多的步骤,因为我们计划更频繁地更改版本号。 我只想在一个地方改变它。 可以这样做吗? 如何?

如何覆盖MSBUILD中.NET引用的CopyLocal(Private)设置

我已经摔了几天,经过大量的search,我找不到我应该走的路。 我想要做的是build立一个MSBUILD项目,将build立我们的整个.NET应用程序(常见的8个解决scheme,也许250个项目之间分裂)与许多设置从个别项目文件覆盖,使debugging版本为了我自己。 具体来说,我想要build立我们的发布configuration与优化closures和完整的debugging信息/ pdbs生成。 另外,为了减less我们目前超长的编译时间,我想为每个项目的每个引用“复制本地”(或者在实际的proj文件xml中是私有的)false。 第一件事情相当简单,我可以相当容易地重写一个项目级别的属性(你甚至可以从MSBuild命令行使用/ p来做到这一点),但是我无法弄清楚如何覆盖引用的一个属性。 我已经尝试了几个在StackOverflow和Web上看到的东西,但没有任何解决scheme。 我可以通过修改Microsoft.Common.targets来完成我想要的function,注释_CopyFilesMarkedCopyLocal目标中的代码完全跳过这些文件的复制。 但我不想改变我的全局configuration,并在任何情况下都这样做。 我创build了我自己的替代目标文件 – 如果我改变一个单独的项目文件指向它的工作原理 – 但我不知道如何指定这用于顶层(我的.proj文件,只是build立全部8种解决scheme)。 这将是非常好的,如果我能以某种方式覆盖_CopyFilesMarkedCopyLocal顶级目标,以便如果MS更改默认目标文件我的构build没有搞砸,但我不知道如何使这个工作。 最好的事情是,如果有一种方法可以重写参考级别的属性,比如你可以投影级别属性,而不必重写/重写构build目标的东西 – 但我没有find任何信息表明这是可能的。 在此先感谢您的帮助。 PS我不可能只是通过所有的项目文件并改变它们; 我需要一个解决scheme,保留现有的代码。

在Visual Studio中显示构build时间?

我们的构build服务器花了太长时间来构build我们的C ++项目之一。 它使用Visual Studio 2008.是否有任何方法让devenv.comlogging在解决scheme中构build每个项目所需的时间,以便我知道在哪里集中精力? 在这种情况下改进的硬件不是一个选项。 我已经尝试设置输出详细程度(在工具/选项/项目和解决scheme/生成和运行/ MSBuild项目生成输出冗长)。 这在IDE中似乎没有任何影响。 从命令行运行MSBuild时(对于Visual Studio 2008,它需要为MSBuild v3.5),它显示最后总时间,但不显示在IDE中。 我真的很想为解决scheme中的每个项目提供一个耗时的报告,以便我能够弄清楚构build过程在哪里花费时间。 另外,因为我们实际上使用NAnt来驱动构build过程(我们使用Jetbrains TeamCity),有没有办法让NAnt告诉我每一步的时间?

如何将PreProcessorDefinitions设置为msbuild任务的任务

以下内容来自一个常规的VS2010 C ++项目。 <ClCompile> <WarningLevel>Level3</WarningLevel> <PrecompiledHeader>Use</PrecompiledHeader> <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> 如果我编辑PreprocessorDefinitions我可以设置PreprocessorDefinitions使用的定义。 我可以通过#ifdef等在我的代码中看到这个 但是,如果我使用以下 <Target Name="NormalBuild" Condition=" '$(_InvalidConfigurationWarning)' != 'true' " DependsOnTargets="_DetermineManagedStateFromCL;CustomBeforeBuild;$(BuildDependsOn)" Returns="@(ManagedTargetPath)"> <ItemGroup> <ManagedTargetPath Include="$(TargetPath)" Condition="'$(ManagedAssembly)' == 'true'" /> </ItemGroup> <Message Text="PreprocessorDefinitions: $(PreprocessorDefinitions)" Importance="High" /> </Target> <Target Name="TestBuild" Returns="@(ManagedTargetPath)"> <MSBuild Projects="demo.vcxproj" Targets="NormalBuild" Properties="PreprocessorDefinitions=THISGETSSETBUTDOESNOTHING"/> </Target> 我也可以通过消息看到, PreprocessorDefinitions包含我通过Properties="PreprocessorDefinitions=THISGETSSETBUTDOESNOTHING"设置的值,但我无法控制我的构build使用#ifdef等。如果我使用常规的设置,并尝试使用<Message Text="PreprocessorDefinitions: $(PreprocessorDefinitions)"输出PreprocessorDefinitions <Message Text="PreprocessorDefinitions: $(PreprocessorDefinitions)"字段实际上是空白的,并且不包含预期的<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>尽pipe我可以使用这些键中的任何一个来控制我的构build#ifdef等 这是为什么? 我能做些什么来通过任务Properties元素传递一个VS2010 C […]

找不到MSBuild目标包

我想打包我的VS2010 Web应用程序项目,准备用msdeploy进行部署。 在开发机器上,我可以这样做: MSBuild.exe "C:\path\to\WebApp.csproj" /target:package 但在我的生成服务器上,我得到这个错误: 错误MSB4057:项目中不存在目标“包”。 我在构build服务器上丢失了什么?

MVCBuildViews不能正常工作

所以我编辑我的csproj文件在MVC 3 RTM应用程序设置以下属性: <MvcBuildViews>true</MvcBuildViews> 这应该会导致我的观点在编译期间得到遵守,如果我的观点被破坏,则强制执行构build错误。 这是我做的唯一的改变,但是,当我尝试构build应用程序时,出现以下错误: 在应用程序级别之外使用注册为allowDefinition ='MachineToApplication'的部分是错误的。 此错误可能是由于虚拟目录未被configuration为IIS中的应用程序。 如果我更改为false,项目编译并成功运行, 以下是在csproj文件中configuration的构build任务(这些都不是手动编辑的,它们是由Visual Studio 2010添加的) <Target Name="BeforeBuild"> </Target> <Target Name="AfterBuild"> </Target> –> <Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'"> <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> </Target> 我在这里错过了什么? 我如何得到MVC 3 / Visual Studio 2010configuration正确,以validation我的意见,在编译时?

BuildActivity忽略ToolsVersion

我有一个持续集成构build在BuildAgent上运行,我无法正常工作。 我最近将代码库更改为C#6.0,并将项目更改为ToolsVersion 14。 我确实在Build Server(TFS 2012)上安装了Visual Studio 2015。 如果我现在检查C#6.0代码,第一个项目的构build失败(“$”是意想不到的或什么的) BuildTemplate是“DefaultTemplate.11.1”如果我检查日志文件,构build调用错误的csc.exe(C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Csc.exe) 如果我确实在没有任何开关的情况下启动MSBuild / 14.0 / Bin / MSBuild可执行文件,那么Build就会成功。 为什么TFS BuildAgent不使用ToolsVersion,我怎样才能让TFS 2012构build我的Visual Studio 2015解决scheme 如果我添加MSBuildArgument /tv:14.0它仍然失败。 因为它调用了MSBuild的版本12,它是Visual Studio 2015附带的.NET 4.6 RC框架的一部分。 更改MSBuild活动的ToolsPath确实可以使构build工作,但如果我尝试运行我的UnitTest,则会吐出子弹。 我得到一个微软的DLL“Microsoft.VisualStudio.TestPlatform.Utilities.dll”exception。 (VS2012也安装在Build Server上)。 更新:我现在unit testing得到一个不同的错误: TF900548: An error occurred publishing the Visual Studio test results. Details: […]

我应该用/ MD还是/ MT编译?

在Visual Studio中,有编译标志/ MD和/ MT,可以让您select所需的C运行时库。 我了解实施中的差异,但我仍不确定使用哪一个。 有什么优点/缺点? 我听说的/ MD的一个好处是,这允许有人更新运行时(如可能补丁安全问题),我的应用程序将受益于此更新。 虽然对我来说,这几乎看起来像一个非function:我不希望人们更改我的运行时间,而不允许我testing新版本! 我很好奇的一些事情: 这将如何影响构build时间? (大概是/ MT有点慢?) 还有什么其他的影响? 大多数人使用哪一个?

运行MSBuild无法读取SDKToolsPath

您好,我有一个运行NAnt脚本的问题,用VS2008及其相关工具进行编译时,用于正确构build基于.Net 2.0的网站。 我最近升级了所有的项目/解决scheme文件到VS2010,现在我的生成失败,出现以下错误: [执行] C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Microsoft.Common.targets(2249,9):错误MSB3086:任务使用S dkToolsPath“”或registry找不到“sgen.exe”键“HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v7.0A”。 确保设置了SdkToolsPath,并且该工具存在于SdkToolsPath下正确的处理器特定位置,并且安装了Microsoft Windows SDK 现在,我已经在构build服务器上安装了Windows SDK的早期版本(.Net 3.5),并安装了完整的.Net 4.0框架,但是我没有运行.Net 4.0特定版本的Windows SDK。 经过一番实验和研究,我终于刚刚设置了一个新的环境variables“SDKToolsPath”,并将其指向我的windows 6.0 sdk文件夹中的sgen.exe副本。 这产生了相同的错误,但它让我注意到即使SDKToolsPath环境variablesIS设置(确认我可以在命令行“回显”它,并且它具有期望的值),错误消息似乎表明它是不被阅读(注意空引号)。 我发现的大部分信息都是.Net 3.5(或更早)的具体信息。 那里没有太多的4.0相关。 search错误代码MSB3086也没有任何用处。 不知道这可能是什么? 斯科特