Is there such a thing as a "content/data only project" in visual studio

Chr*_*ell 23 visual-studio-2008 visual-studio

我有一堆辅助的XML和XSLT文件,我想在visual studio中编辑和管理.

这些文件在逻辑上不属于我的解决方案中的任何代码项目,因此为了将它们整齐地分组,我在visual studio中创建了一个"虚拟"C#dll项目,并在调试/发布版本中禁用它.

我想知道是否有更好的方法来实现相同的结果(即在解决方案资源管理器中显示所有文件).我认为真正想要的是一个视觉工作室项目类型的"仅限内容",但这样的东西不存在(或者我看起来不够努力?).

我已经玩弄了将文件添加为解决方案项目的想法,但之后它们似乎更难管理,因为创建新的"解决方案项目文件夹"实际上并不在磁盘上创建文件夹.

有人有主意吗?

stu*_*uck 22

Visual Studio 2015有一个名为"共享项目"的项目类型,它本质上是一个没有目标的仅限内容的项目.它列在Visual C#下,但它可以用于任何文件.

在此输入图像描述

  • 使用通配符包含(如 /sf/answers/502424821/ 中所示)是对共享项目的一个很好的添加 (2认同)

Chr*_*ell 13

一位工作同事提出了一个解决方案.

他建议手动编辑项目以DefaultTargets从项目中删除(并删除现在未使用的属性的加载).

如果项目中没有目标,MSBuild会抱怨,因此他添加了三个空目标.

最终的项目看起来像这样

<?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>
Run Code Online (Sandbox Code Playgroud)

不可否认,这个解决方案需要我想要的更多摆弄,但似乎实现了我所追求的目标:即一个不会产生任何构建输出的项目.

  • 根据另一个回复(https://gist.github.com/bigT/9d0fd8bba28014d3febf)的建议更新了VS2013并禁用了调试属性 (2认同)

Ken*_*itt 10

Andy发布了一个解决方案链接,该解决方案主要适用于我; 基本上从项目文件中删除以下行:

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Run Code Online (Sandbox Code Playgroud)

并添加以下行:

<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>
Run Code Online (Sandbox Code Playgroud)

我还发现禁用项目Debug属性"启用Visual Studio宿主进程"(对于每个配置)阻止生成MyProject.vshost.exe文件.

正如David I. McIntosh对此答案的评论中指出的那样,如果您的项目是具有多个项目的解决方案的一部分,并且任何其他项目使用与仅内容项目相同的输出路径,则上述Clean目标将删除所有文件在输出路径中,即其他项目的构建输出,因此只有在仅内容项目是构建的第一个项目(在共享相同构建输出路径的项目中)时才是正确的.以下是Clean此方案的更安全,更友好的目标:

<Target Name="Clean">
  <Delete Files="@(Content->'$(OutputPath)%(RelativeDir)%(Filename)%(E??xtension)')"/>
</Target>
Run Code Online (Sandbox Code Playgroud)

  • 上面的"清洁"目标很危险.这样更好:`<Target Name ="Clean"> <Delete Files ="@(Content - >'$(OutputPath)%(RelativeDir)%(Filename)%(Extension)')"/> </ Target>` (2认同)