2010-08-23 1 views
14

Visual Studio에서 편집 및 관리 할 수있는 보조 XML 및 XSLT 파일이 있습니다.Visual Studio에는 "콘텐츠/데이터 전용 프로젝트"와 같은 것이 있습니까?

파일은 논리적으로 내 솔루션의 코드 프로젝트에 속하지 않으므로 깔끔하게 그룹화하기 위해 Visual Studio에서 "더미"C# dll 프로젝트를 만들고 Debug/release 빌드에서 빌드를 비활성화했습니다. .

같은 결과를 얻을 수있는 더 좋은 방법이 있는지 궁금해했습니다. 즉, 솔루션 탐색기에 모든 파일을 표시하는 것이 좋습니다. 내가 정말로 원한다고 생각하는 것은 비주얼 스튜디오 프로젝트 유형의 "컨텐트 만"이지만 그러한 것은 존재하지 않습니다 (또는 충분히 열심히 보지 않았습니까?).

솔루션 항목으로 파일을 추가한다는 생각에 놀랐지 만 새로운 "솔루션 항목 폴더"를 만드는 것이 실제로 디스크에 폴더를 만들지 않기 때문에 관리하기가 더 어려워 보입니다.

어떤 아이디어가 있습니까?

답변

12

직장 동료가 해결책을 제시했습니다.

그는 프로젝트에서 DefaultTargets을 제거하고 현재 사용되지 않는 속성의로드를 삭제하기 위해 프로젝트를 직접 편집 할 것을 제안했습니다.

MSBuild는 프로젝트에 대상이 없으면 3 개의 빈 대상을 추가한다고 불평합니다.

마지막 프로젝트는이

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> 
    <ProductVersion>9.0.30729</ProductVersion> 
    <SchemaVersion>2.0</SchemaVersion> 
    <ProjectGuid>{541463A7-7CFA-4F62-B839-6367178B16BD}</ProjectGuid> 
    </PropertyGroup> 
    <ItemGroup> 
    ... files ... 
    </ItemGroup> 
    <ItemGroup> 
    ... files ... 
    </ItemGroup> 
    <Target Name="Build"/> 
    <Target Name="Rebuild"/> 
    <Target Name="Clean"/> 
</Project> 

틀림 같이 보입니다,이 솔루션은 내가 좋아했을 것이라고 조롱 더 필요하지만 난 후 무엇 달성 할 것 같다 : 어떤 빌드를 생산하는 aattempt하지 않는, 즉 프로젝트 산출.

+0

알아두면 좋음;) –

+2

VS2013 용으로 업데이트되고 다른 응답 (https://gist.github.com/bigT/9d0fd8bba28014d3febf) –

1

그런 다음 Blank solution을 만들어보십시오. Empty project을 작성하십시오. 솔루션 폴더에 각 폴더의 파일을 가지고 있습니다. 속성 창에서 Show all files을 사용하여 해당 폴더를 프로젝트에 포함시킵니다. 그 외에는 더 좋은 해결책이 없습니다. 나는 희망.

+0

답장을 보내 주셔서 감사합니다. 빈 프로젝트 템플릿을 알지 못했지만 최종 결과는 기본적으로 지금 가지고있는 것과 동일합니다. 즉, 컴파일러 경고를 방지하기 위해 빌드에서 비활성화해야하는 빈 C# 프로젝트입니다. –

+0

나는 모른다 : 나는 당신과 함께 이것을 지켜 볼 것이다. 그러나 이러한 경고가 xml 또는 xslt 파일에서만 발생하는 경우. Build 액션을 Resource로 설정할 수 있습니다. 이후, 당신은 그 모드들 중 하나로 구축하지 않습니다. –

9

앤디는 대부분 나를 위해 일하는 솔루션으로 link을 게시했습니다. 기본적으로 프로젝트 파일에서 다음 행 삭제 :

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

을 다음과 같은 줄을 추가

<Target Name="Build"> 
    <Copy 
    SourceFiles="@(Content)" 
    DestinationFiles="@(Content->'$(OutputPath)%(RelativeDir)%(Filename)%(Extension)')" /> 
</Target> 
<Target Name="Clean"> 
    <Exec Command="rd /s /q $(OutputPath)" Condition="Exists($(OutputPath))" /> 
</Target> 
<Target Name="Rebuild" DependsOnTargets="Clean;Build"> 
</Target> 

는 또한 발견 각각의 프로젝트 디버그 속성 "은 Visual Studio 호스팅 프로세스 사용"을 (해제 구성) MyProject.vshost.exe 파일이 생성되지 않았습니다. David I. McIntosha comment on this answer 지적

으로 프로젝트 다른 프로젝트 내용 만 프로젝트와 같은 출력 경로를 사용하는 여러 프로젝트와 솔루션의 일부인 경우, 위의 Clean 대상은 모든 파일을 삭제합니다 출력 경로 (즉, 다른 프로젝트의 빌드 출력)에 저장되므로 콘텐츠 전용 프로젝트가 (동일한 빌드 출력 경로를 공유하는) 프로젝트 중 첫 번째 프로젝트 인 경우에만 올바를 수 있습니다.

<Target Name="Clean"> 
    <Delete Files="@(Content->'$(OutputPath)%(RelativeDir)%(Filename)%(E‌​xtension)')"/> 
</Target> 
+0

에서 제안한대로 디버그 속성이 비활성화 됨 TFS 빌드에서이 작업을하려면 * 가져 오기 * 가져 오기 *를 제거하지 마십시오. Microsoft.CSharp.Targets의 '$ (OutputPath)'인스턴스를 $ (OutDir)로 바꿉니다. 여전히 로컬에서도 작동합니다. – JamesQMurphy

+2

위의 "깨끗한"목표는 위험합니다. \t'<대상 이름 = "정리"> \t <삭제 파일 = " '(내용 ->'$ (출력 경로) % (파일 이름) % (확장자) ')") ")"/> \t' –

+0

@ DavidI.McIntosh 그것에 대해 무엇이 위험합니까? –

9

비주얼 스튜디오 2015 본질적 목표와 내용 만 프로젝트 "공유 프로젝트"라는 프로젝트 유형이 : 다음은이 시나리오에 대한 안전하고 우호적 Clean 대상입니다. Visual C#에 나열되어 있지만 모든 파일에 사용할 수 있습니다.

enter image description here

1

이 답변 된 내용의 선언에 불과 위에 내 의견에 약간의 수정과 함께, 크리스 퓨 으렐 케니 Evitt에 의해 주어진 위의 답변의 편리한 통합, 그리고 좀 더 상세하게 - 옵션으로, "복사 항상"를 "최신 경우 복사"와 "복사하지 마십시오"출력 디렉토리에이 항상 복사 모든 "내용"파일이 있음을

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> 
     <ProjectGuid>{541463A7-7CFA-4F62-B839-6367178B16BD}</ProjectGuid> 
    </PropertyGroup> 
    <PropertyGroup Condition="'$(Configuration)|$(Platform)' == '64-bit|AnyCPU'"> 
     <PlatformTarget>x64</PlatformTarget> 
     <OutputPath>..\builds\$(Configuration)\</OutputPath> 
     <IntermediateOutputPath>..\builds\$(Configuration)\Intermediate\YourProjectName\</IntermediateOutputPath> 
    </PropertyGroup> 
    <ItemGroup> 
     <Content Include="fileInProjectFolder.csv" /> 
     <Content Include="SubDir\fileInSubdir.txt" /> 
     <Content Include="..\actualSourceDirectoryOfFile\app.log.basic.config"> 
      <Link>targetSubdirInOutputDir\app.log.basic.config</Link> 
     </Content> 
     <Content Include="..\actualSourceDirectoryOfFile\yetAnotherFile.config"> 
      <Link>yetAnotherFile.config</Link> 
     </Content> 
     ... more files ... 
    </ItemGroup> 
    <Target Name="Build"> 
     <Copy 
      SourceFiles="@(Content)" 
      DestinationFiles="@(Content->'$(OutputPath)%(RelativeDir)%(Filename)%(Extension)')" /> 
    </Target> 
    <Target Name="Clean"> 
     <Delete Files="@(Content->'$(OutputPath)%(RelativeDir)%(Filename)%(E‌​xtension)')"/> 
    </Target> 
    <Target Name="Rebuild" DependsOnTargets="Clean;Build"> 
    </Target> 
</Project> 

참고 : 항목 /처럼 보일 수 있어야 Visual Studio GUI에 표시됩니다 (예 : .csproj 파일에 <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>으로 표시). 무시됩니다.

관련 문제