.sln 파일의 속성을 MSBuild의 프로젝트 파일로 전달할 수 있습니까? (Is it possible to pass properties from an .sln file to project file in MSBuild?)


문제 설명

.sln 파일의 속성을 MSBuild의 프로젝트 파일로 전달할 수 있습니까? (Is it possible to pass properties from an .sln file to project file in MSBuild?)

Consider the following snippet from an .sln file:

...
# Visual Studio 2010
Project("{FAE04EC0‑301F‑11D3‑BF4B‑00C04F79EFBC}") = "MainApp", "MainApp\MainApp.csproj", "{FC66E4A5‑0538‑47DC‑B450‑788B98D9461E}"
EndProject
...

And the following snippet from the corresponding MainApp.csproj file:

...
<ItemGroup Condition="$(LibAProjRef) == false">
  <Reference Include="LibA, Version=1.0.0.0, Culture=neutral">
    <SpecificVersion>False</SpecificVersion>
    <HintPath>..\..\Lib\LibA.dll</HintPath>
  </Reference>
</ItemGroup>
<ItemGroup Condition="$(LibAProjRef) == true">
  <ProjectReference Include="..\LibA\LibA.csproj">
    <Project>{2A45F32B‑182B‑4B8D‑A8A4‑1BFBF2E81CAD}</Project>
    <Name>LibA</Name>
  </ProjectReference>
</ItemGroup>
...

Basically what I'm trying to do here is create a project file that can use another library project, either already built, or as a project reference, depending on if the library project is present in the solution or not.

Is there a way to pass properties from the .sln file to the project file so that I can accomplish this?

Or: is there another way to achieve this?


참조 솔루션

방법 1:

I don't think you can pass properties from the .sln file, because MSBuild actually works with XML files!

What I could think of is to write a Custom MSBuild Task, and read the wanted values from the .sln file.

방법 2:

You can repurpose either the Configuration or Platform properties, which can be set in a dropdown of the solution, or use one of the properties Scott Bilas mentioned.

I was hijacking the $(Configuration) field, but now thanks to Scott's comment:

<ProjectReference Include="$(SolutionDir)\..\DataLib\DataLib.csproj">

I'm guessing you could go either way, and your use of conditions appears sound.

방법 3:

I had the same need for a post‑build event. I used the following solution in VS2015. 

You can define your Property in MainApp.csproj inside the PropertyGroup tag like so:

  <PropertyGroup Label="Globals">
        <LibAProjRef>False</LibAProjRef>
  </PropertyGroup>

and then when you build the solution you can say

MSBuild "MySln.sln" /m /t:rebuild /p:Configuration=Release /p:Platform=x64 /p:LibAProjRef=True

Note that the here the Properties are strings so your condition should be

Condition="'$(LibAProjRef)' == 'True'"

(by Amir Abiriuser900202LamarthAlex Ilie)

참조 문서

  1. Is it possible to pass properties from an .sln file to project file in MSBuild? (CC BY‑SA 3.0/4.0)

#msbuild #.net






관련 질문

빌드 오류 + Excel 2010용 VSTO 추가 기능 생성 (Build Error + Creating VSTO addin for excel 2010)

.sln 파일의 속성을 MSBuild의 프로젝트 파일로 전달할 수 있습니까? (Is it possible to pass properties from an .sln file to project file in MSBuild?)

ProjectInfo.xml 파일을 찾을 수 없습니다. 소나 속성 파일 생성 실패 (No ProjectInfo.xml files were found. Generation of the sonar-properties file failed)

CSC 컴파일러는 어디에서 PE 파일을 생성합니까? (Where CSC Compiler Generate PE file?)

error CNDL0005: Product 요소에 예기치 않은 자식 요소 'Dialog'가 포함되어 있습니다. (error CNDL0005 : The Product element contains an unexpected child element 'Dialog')

Visual Studio 빌드 중 PostSharp OutOfMemoryException (PostSharp OutOfMemoryException during Visual Studio build)

개체 배열을 설정하는 동안 FindBug 오류 '변경 가능한 개체에 대한 참조를 통합하여 내부 표현을 노출할 수 있음'을 수정하는 방법은 무엇입니까? (How to Fix FindBug error 'May expose internal representation by incorporating reference to mutable object' while setting Array of Objects?)

MSBuild에서 내 x86 프로그램을 빌드할 수 없습니다. (MSBuild cannot build my x86 program)

MSDeploy를 사용하여 Web.config 사용자 지정 섹션을 변환하는 방법은 무엇입니까? (How-to Transform Web.config Custom Sections With MSDeploy?)

오류: 프로젝트의 기본 XML 네임스페이스는 MSBuild XML 네임스페이스여야 합니다. (Error: The default XML namespace of the project must be the MSBuild XML namespace)

Azure Devops에서 msbuild를 사용하여 릴리스 및 디버그 구성 모두로 너겟 파일을 만드는 방법 (How to create a nuget file with both the Release and Debug configurations using msbuild in Azure Devops)

.csproj 파일에서 두 날짜의 차이를 얻으려면 어떻게 해야 합니까? (How do I get the difference between two dates in a .csproj file?)







코멘트