如何在MSBuild中传递参数以设置属性值?

6
假设我在一个解决方案中有3个cs项目,并在这3个csproj文件中导入了Common.props文件。
以下是我的Common.props文件,它将位于解决方案级别,解决方案中的每个项目都将导入此Common.props文件。我试图弄清楚如何通过命令行设置Build服务器上的Externals属性,并调用一个也位于解决方案级别的自定义CI.Build文件。对于MSBuild来说,这很新颖,我搜索了各种答案,但没有找到100%符合我的意愿的解释。
   <?xml version="1.0" encoding="utf-8"?>
    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
        <PropertyGroup>
           <Externals Condition="'$(Externals)'==''">..\..\..\Externals\</Externals>
           </PropertyGroup>
           <ItemGroup>
               <ThirdPartyLibs Include="$(OutputPath)\*.dll" />
           </ItemGroup>
           <Target Name="BeforeResolveReferences">
           <PropertyGroup>
               <AssemblySearchPaths>$(Externals);$(AssemblySearchPaths)</AssemblySearchPaths>
           </PropertyGroup>
           </Target>
               <Target Name="BeforeBuild">
               <Message Text="$(Externals)"></Message>
           </Target>
           <Target Name="AfterBuild">
               <Message Text="After Build______"></Message>
           </Target>
           <Target Name="CleanDlls" AfterTargets="Clean">
               <Delete Files="@(ThirdPartyLibs)"></Delete>
           </Target>
    </Project>

你可以使用 /p 选项启动 msBuild 来传递参数:MSBuild.exe /p:Externals="c:\Temp" - Troopers
@Troopers 请您将此内容添加为答案,我正在尝试使用msbuild命令行并调用my.csproj来执行此操作,msbuild C:\my.csproj,但是当我使用命令行构建my.csproj时,Common.Props文件未被导入到my.csproj中,但是在Visual Studio中构建my.csproj以设置AssemblySearch路径时会导入。 - OutOFTouch
嗯,当我调用解决方案时,Common.props的导入命令行有效,但在my.csproj中却无效。我想知道这是否是因为在my.csproj中,我使用$(SolutionDir)获取Common.props路径进行导入。 - OutOFTouch
是的,这就是了。如果我要在命令行直接构建my.csproj文件,那么在导入时我必须使用Common.Props文件的相对路径。 - OutOFTouch
@Troopers 如果您能将您的评论添加为答案,我可以将其标记为正确。 - OutOFTouch
显示剩余2条评论
1个回答

15

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接