通过将这些行放在我的.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
我有两个问题:
如何阻止Visual Studio添加这些新行?由于它在项目中被包含两次,因此在解决方案资源管理器中显示两次非常烦人。
使用通配符选择文件时,如何将DependentUponment元素与每个文件相关联?有没有办法从所选文件中挖掘名称以自动相对关联aspx文件?类似的东西:
<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项目的文档,我只是决定尝试其他的东西。
答案 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中包含文件,但仍然让我拥有正确的复制元数据。