MSBuild(vsproj)设置用于在构建之前将所有目标文件复制到指定文件夹

时间:2018-02-03 04:38:27

标签: android visual-studio msbuild xamarin.android csproj

我的环境是Visual Studio 2017(15.5.5)/ Xamarin for Android。

我想复制和更新"资产"在自动构建之前,来自另一个文件夹的文件(在这种情况下,所有文件位于" ../ crossplat /"文件夹下),因为这些文件正在为其他平台项目共享。

python

(示例项目位于OneDrive

出于这个原因,我在参考MSDN和StackOverflow的答案时为.csproj文件添加了属性,但当然我的知识不足,而且它不起作用。

\COPYTEST
├─crossplat
│  │  text1.txt
│  │
│  └─sub
│      │
│      └─sub2
│          │
│          └─sub3
│
└─project
    │  MainActivity.cs
    │  xa.csproj
    │  xa.sln
    │
    ├─Assets                      // !Destination folder
    ├─Properties
    │      AndroidManifest.xml
    │      AssemblyInfo.cs
    │
    └─Resources
        │  Resource.Designer.cs

请告诉我执行此程序的适当方法。

1 个答案:

答案 0 :(得分:0)

  

MSBuild(vsproj)设置,用于在构建

之前将所有目标文件复制到指定文件夹

很抱歉迟到的回复,但希望这个答案可以给你一些帮助。

在测试目标后,我发现目标中存在两个错误,纠正后一切都正常。

首先,您应该在项目的最后设置此目标,只需之前结束标记</Project>之后 strong>导入:

 <Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />

其次,目标中的错误路径。您正在起诉以下脚本以列出目标中的文件:

<ItemGroup>
  <CrossFiles Include="..\clossplat\**\*.*" />
</ItemGroup>

但是,我发现你的文件夹名称是 crossplat 而不是 clossplat (&#34; l &#34;而不是&#34;的 - [R &#34)。所以VS / MSBuild将找不到这些文件。

纠正这两个错误后,此目标正常工作:

  <Target Name="BeforeBuild">
    <ItemGroup>
      <CrossFiles Include="..\crossplat\**\*.*" />
    </ItemGroup>

    <Copy SourceFiles="@(CrossFiles)" DestinationFolder="$(ProjectDir)Assets\%(RecursiveDir)" SkipUnchangedFiles="true" />

    <ItemGroup>
      <Content Include="Assets\**">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>
    </ItemGroup>

  </Target>

</Project>

输出:

enter image description here