2014-11-07 3 views
1

소스 파일 및 속성을 공유하려는 많은 프로젝트가있는 솔루션이 있습니다. 예를 들어 공통 .props 파일에 소스 파일을 넣으면 소스 파일은 빌드에 영향을 주지만 Visual Studio에는 표시되지 않습니다. 짧은 예는 다음과 같습니다공통 소스 파일 및 속성을 지정하고 Visual Studio에 표시하는 방법

Scratch.csproj :

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> 
    <ItemGroup> 
    <Compile Include="Program.cs"/> 
    </ItemGroup> 

    <Import Project="a.props" /> 
    <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
</Project> 

A.props :

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup> 
    <Compile Include="a.cs"/> 
    </ItemGroup> 
</Project> 

a.cs, ​​Program.cs :

namespace Scratch 
{ 
    public class A {} 
} 

이 코드는하지 않습니다 클래스 A가 두 번 선언 되었기 때문에 컴파일하십시오. 그러나 a.cs 파일은 Visual Studio 솔루션에 아무 것도 표시되지 않습니다. 솔루션에 표시되는 공유 속성과 소스 파일을 가질 수 있도록이 문제가 해결 되었습니까? 한 가지 가능성이 a.props 대신 a.csproj를 사용하여 솔루션에 추가하는 것을 보았습니다. 그러나 그것도 문제가 있습니다. 대신에 해당 프로젝트의 일부 속성 (조건 집합에 따라 다름)을 사용하는 경우 어떤 소스 파일이나 속성이 어떤 프로젝트로 이동하는지 명확하지 않습니다.

+0

공통 코드를 클래스 라이브러리에 넣는 것만 큼은 어떨까요? –

+0

코드 파일뿐 아니라 속성에 대해서도이 작업을 수행하려고합니다. 또한 공유 코드는 단일 모듈로 컴파일하기에 충분한 코드가 아니므로이를 수행하기 어려울 수 있습니다. –

+0

하나의 작은 클래스도 클래스 라이브러리에 만들 수 있습니다. –

답변

2

Visual Studio는 MSBuild 파일의 완벽한 유연성을 처리하지 않습니다. Visual Studio가 MSBuild 라이브러리를 호출하지만 프로젝트 디자이너, 솔루션 탐색기 등이 설계되지 않은 것을 표현할 수 없기 때문에 작업을 빌드합니다.

공유 소스를 포함하는 일반적인 방법 (즉, 별도의 프로젝트를 만들지 않는 경우)은 프로젝트에 파일을 링크로 추가하는 것입니다. 종료 항목 추가 ... 파일을 선택하고 버튼을 클릭하는 대신 버튼 오른쪽에있는 화살표를 클릭하고 링크를 추가하십시오. 솔루션 탐색기는 링크 된 파일을 인식하도록 설계되었습니다.

속성은 공유 가져 오기 파일에서 잘되어야하지만 Visual Studio는 가져 오기에 대한 변경 내용을 인식하지 못합니다. 프로젝트를 수동으로 다시로드해야합니다.

+0

심지어 공유 속성도 올바르게 작동하지 않습니다. 내가 abc을 a.props에 추가하면 VS에 표시되지만, VS에서 편집하면 공유 된 props 파일이 아닌 csproj에 다시 저장됩니다. –

+0

예, Visual Studio 프로젝트 디자이너가 조작하는 속성은 프로젝트 파일에 저장됩니다. 당신이 할 수있는 최선의 방법은 Visual Studio가 그것들을 쓴 후에 Import를 넣는 것입니다. –

관련 문제