【问题标题】:Copy file from one folder to root directory将文件从一个文件夹复制到根目录
【发布时间】:2019-02-10 14:26:17
【问题描述】:

我在 Xamarin android 项目中有 2 个名为 CONFIG1 和 CONFIG2 的文件夹。 每个文件夹中都有一个文件(json 文件)。 但是在编译过程中有一个任务在寻找那些特定的文件(只有一个) 项目的根目录。 因此,对于解决方案,我想在项目构建期间通过编辑项目文件将文件复制到根目录中。

我尝试过使用 Copytooutputdirectory 和 copytopublishdirectory,但它们都不起作用..

请帮忙..

【问题讨论】:

  • 为什么会有一个在根文件夹中查找这些文件的任务?那几乎总是一个放东西的坏地方。输出目录可能是更合适的地方。
  • 有一些任务,比如寻找根目录..例如 googleservices.json(在谷歌库实现中使用)......这只是例子......有些任务是设计了一种查找根目录的方式
  • 明白了...谢谢。我想我假设这些事情不像你的要求那样“动态”。我不知道 .csproj 指令会将内容移至根目录。我通常会推荐一个预构建任务,但在我参与的最后一个 xamarin 项目中,它们不能可靠地工作。可能不再是这种情况了。当然,这不是一个非常便携的解决方案。
  • 感谢您的回复..能否请您提供一些指导以在我的情况下编写预构建任务以将文件复制到根目录..所以这可能很容易..我不熟悉 pre/发布构建代码
  • 当然 - 我会发布一个答案...给我一些

标签: c# xamarin


【解决方案1】:

您可以执行预构建任务。我无法谈论 Xamarin 项目中预构建任务的可靠性。过去,他们并不稳定。也许现在他们是。

这是 Visual Studio 2017 中“构建任务”选项卡(项目属性)的图片,其中“编辑构建后”对话框打开。基本上,构建前和构建后的步骤在机械上是相同的。它们在操作系统的命令外壳中运行程序。 “语法”只是操作系统的批处理语言。例如,在 Windows 中,您可能会运行一堆 xcopy 命令来移动东西。

有一个预处理器可以在运行脚本之前进行变量替换...这些是“宏”部分中显示的内容...以及它们的当前值。该示例将$(TargetPath) 的值传递给update_agent.bat,这是一个存储在我们解决方案根目录中的批处理文件。有很多变量可供选择...正如我试图在对话框中显示的那样。

构建前和构建后的步骤都有缺点。它们在不同的机器上会以不同的方式解决...但是如果您引用解决方案之外的文件,它们可能不会在每个开发人员的机器上的同一位置...并且该步骤会悄悄地失败。

此外,它们不能在操作系统之间移植。我什至不确定 VS 是否在 Mac OS 版本的 Visual Studio 上提供构建前和构建后步骤。

这些缺点是.CSPROJ 支持许多指令的原因

所以,虽然这是一个答案,但我怀疑它是答案,除非有人有更好的建议。不过,它可能会让您摆脱眼前的需求。

编辑

MsBuild.exe 是实际处理您的 .csproj 的程序...您可以将 MsBuild 指令直接放入您的项目中。这些指令可以使用该预/后构建对话框中的同一组可替换变量。可能是更好的方法。可能更便携。

<Target Name="CopyFiles">  
    <Copy  
        SourceFiles="@(MySourceFiles)"  
        DestinationFolder="c:\MyProject\Destination"  
    />  
</Target>  

Here's MsBuild 参考中的复制任务。

【讨论】:

  • 感谢您的回答...我将对此进行一些测试..还有一种方法可以通过代码来做到这一点
  • @uncle_scooge 我添加了一个关于 MSBuild 的注释......可能对你来说是一个更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 2013-05-21
  • 2017-09-25
  • 1970-01-01
  • 2021-08-31
相关资源
最近更新 更多