问题
我们在解决方案中使用配置转换.例如:Debug,Test,Staging,Release但是,这些配置仅用于我们的MVC项目.所有库只使用Debug和Release,这更有意义,因为我们的库只需要在调试模式或发布模式下构建.
尝试从命令行构建单个项目时会出现此问题.我需要能够这样做才能将我们的构建从TeamCity自动部署到我们的测试环境.
当我像这样构建单个项目时
msbuild myproject.csproj
/t:Build
/P:Configuration=Test
/P:Platform=AnyCPU
/P:DeployOnBuild=True
/P:DeployTarget=MSDeployPublish
/P:MsDeployServiceUrl=https://SERVER:8172/MsDeploy.axd
/P:AllowUntrustedCertificate=True
/P:MSDeployPublishMethod=WMSvc
/P:CreatePackageOnPublish=True
/P:UserName=Username
/P:Password=Passsword
/P:DeployIisAppPath="IISAPPPATH"
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
myproject.csproj" (Build target) (1) -> "C:\src\myproject.csproj" (default target) (18) -> c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(483,9) : error : The OutputPath property is not set for project 'sampleLibrary.csproj'. Please check to make sure that you have specified a valid combination of Configuration and Platform for this project. Configuration='Test' Platform='AnyCPU'. You may be seeing this message because you are trying to build a project without a solution …
我已经阅读了一些帖子(参见下面的参考资料),还没有找到特定于我的技术堆栈的最佳实践指南.
目标:创建一个NuGet包,其目标是使用MSBuild和NuGet通过TeamCity从单个.csproj文件构建的多个.NET框架.
约束:
我有两种方法:
创建单个构建配置.它将包含三个构建步骤:编译.NET 3.5,编译.NET 4.0,使用NuGet打包.每个构建步骤都取决于最后一个成功.我用这种方法看到的唯一真正的问题(希望有一个我不知道的解决方案)是每个构建步骤都需要自己的一组构建参数(例如,system.TargetFrameworkVersion和system.OutputPath)来指定DLL的唯一位置(例如,bin\release\v3.5和bin\release\v4.0),以便NuGet包步骤能够根据.nuspec文件中的Files部分执行其操作.
创建多个构建配置.每个构建步骤的一个构建配置.使用这种方法,很容易解决TargetFrameworkVersion和OutputPath构建参数问题,但我现在必须创建快照依赖项并在构建中共享程序集版本号.它也会占用构建配置插槽,这对我们来说是好的(但不是最佳的),因为我们拥有Enterprise许可证.
选项#1似乎是显而易见的选择.选项#2感觉很脏.
所以我的两个问题是:
参考文献:
msbuild teamcity .net-framework-version multitargeting nuget
MSBuild的Delphi文档说
/ property:name = value设置或覆盖项目级属性,其中name是属性名称,value是属性值.使用分号或逗号分隔多个属性,或单独指定每个属性./ p也可以接受.例如:
/属性:WarningLevel = 2; OutputDir = BIN \调试
我找不到可用属性的列表,这是我目前所知道的:
我想得到一个完整的列表,但我最感兴趣的是能够覆盖Defines(dcc32 -d等价物).如果这些可以与dcc32相当,那将是锦上添花!