Visual Studio:停止修改CSPROJ和自定义包含

时间:2016-06-02 22:26:22

标签: c# visual-studio visual-studio-2015 csproj

通过将这些行放在我的.csproj文件中,我成功地包含了所有项目文件:

<ItemGroup>
  <Content Include="**\*.*" Exclude="**\*.cs"></Content>
</ItemGroup>

<ItemGroup>
  <Compile Include="**\*.cs" Exclude="**\*.as?x.*"></Compile>

  <Compile Include="**\*.aspx.cs">
    <SubType>ASPXCodeBehind</SubType>
  </Compile>
  <Compile Include="**\*.ascx.cs">
    <SubType>ASPXCodeBehind</SubType>
  </Compile>
  <Compile Include="**\*.aspx.designer.cs"></Compile>
  <Compile Include="**\*.ascx.designer.cs"></Compile>
</ItemGroup>

然后我使用以下行成功将所有文件复制到另一个目录中:

<Target Name="AfterRebuild">
    <Copy SourceFiles="@(Content)" DestinationFolder="\wwwroot\%(Content.RecursiveDir)" SkipUnchangedFiles="true" />
</Target>
<Target Name="AfterRebuild">
  <Copy SourceFiles="@(Compile)" DestinationFolder="\wwwroot\%(Compile.RecursiveDir)" SkipUnchangedFiles="true" />
</Target>

我遇到的第一个问题是每次我向项目添加另一个文件时,Visual Studio决定重新生成每个.designer.cs文件包含以及添加新文件include。添加文件后它看起来像这样:

<ItemGroup>
  <Compile Include="a_bunch_of_these.designer.cs" />
  <Compile Include="a_bunch_of_these.designer.cs" />
  <Compile Include="a_bunch_of_these.designer.cs" />
  ...

  <Compile Include="Business\WebForm1.aspx.designer.cs">
    <DependentUpon>WebForm1.aspx</DependentUpon>
  </Compile>

  <Compile Include="**\*.cs" Exclude="**\*.as?x.*"></Compile>

  <Compile Include="**\*.aspx.cs">
    <SubType>ASPXCodeBehind</SubType>
  </Compile>
  <Compile Include="**\*.ascx.cs">
    <SubType>ASPXCodeBehind</SubType>
  </Compile>
  <Compile Include="**\*.aspx.designer.cs"></Compile>
  <Compile Include="**\*.ascx.designer.cs"></Compile>
</ItemGroup>

到项目。我遇到的第二个问题不太重要,但仍然有点烦人。我没有ItemGroup元素下的Item元素中的dependantupon属性,因此在解决方案资源管理器中,文件不会耦合在一起: See WebForm1 vs WebForm2

我有两个问题:

  1. 如何阻止Visual Studio添加这些新行?由于它在项目中被包含两次,因此在解决方案资源管理器中显示两次非常烦人。

  2. 使用通配符选择文件时,如何将DependentUponment元素与每个文件相关联?有没有办法从所选文件中挖掘名称以自动相对关联aspx文件?类似的东西:

  3. <ItemGroup>
    <Compile Include="**\*.aspx.cs">
      <SubType>ASPXCodeBehind</SubType>
      <DependentUpon>%(Filename)%(Extension)</DependentUpon>
    </Compile>
    </ItemGroup>
    

    编辑:这样你们就可以对我尝试做的事情有一个全面的了解:我的项目是自动将网站部署到服务器上。我决定使用Team City来完成CI。它克隆它连接的repo,然后构建项目。此代码使构建完成后,项目将自动复制到具有正确结构的正确文件夹。

    我还尝试过msbuild社区任务中的ftpUpload,但是项目很大,ftp需要花费大量时间。

    我看过的另一件事是WebDeploy,但看到我找不到使用Web Deploy的Visual Studio 2015项目的文档,我只是决定尝试其他的东西。

1 个答案:

答案 0 :(得分:1)

所以,我找到了解决我的问题的方法:

<Target Name="AfterRebuild">
  <ItemGroup>
    <cpyContent Include="**\*.*"></cpyContent>
  </ItemGroup>
  <Copy SourceFiles="@(cpyContent)" DestinationFolder="\wwwroot\%(cpyContent.RecursiveDir)" Retries="2" SkipUnchangedFiles="true" />
</Target>

由于ItemGroup位于Target元素中,因此VS看起来并未将其包含在GUI中。这让Visual Studio可以在GUI中包含文件,但仍然让我拥有正确的复制元数据。