0

我在 Visual Studio Community 2015 中有一个 Xamarin PCL 解决方案。

我有兴趣为两个不同的客户部署适用于 Android 和 iOS 的相同应用程序。唯一会改变的是启动图像和应用程序图标。

我曾想过在我的 git 存储库中有不同的分支,每个分支都针对一个客户。但我认为这不是一个合适的解决方案。

另外,我曾想过有不同的配置解决方案,例如在 iOS 中:

Configuration: [Ad-Hoc customer 1] - Platform: iPhone
Configuration: [Ad-Hoc customer 2] - Platform: iPhone

然后更改每个配置的项目属性的参数。但是如果我更改特定配置的参数,切换到其他配置,然后我回到第一个配置的参数,还有第二个配置的参数。

如果我没记错的话,我必须为每个构建指定不同的包名称,否则,Google Play 和 Apple Store 将不接受我的应用程序。

在 Xcode 中,这个概念是目标/目标。

在 Visual Studio 2015 中实现我的目标的正确形式是什么?

4

2 回答 2

1

不幸的是,这不受 Visual Studio 支持。

但是还有第三种解决方案。您可以创建另一个项目并将所有(静态)文件添加为项目的链接。有了这个,您不必在配置或分支之间切换,您只需选择项目。

要将文件添加为链接,您必须右键单击文件夹 -> 添加 -> 现有文件 -> 从原始项目中选择文件 -> 在“添加”上单击箭头并选择“添加为链接”(或类似的方式)

如果您更愿意通过配置来完成,我建议您阅读这个问题

于 2016-04-26T16:14:56.260 回答
0

我已经通过以下步骤实现了解决方案:

  1. 在我的 Visual Studio 解决方案中,在 Droid 项目中,我创建了一个文件夹“Customers”,并在该文件夹中创建了两个子文件夹(每个文件夹对应一个客户“CustomerA”和“CustomerB”)
  2. 在客户文件夹中,我已将我想为每个客户更改的图像、resx、...文件放入其中。
  3. 在项目的根结构中,我创建了一个 PowerShell 脚本 (.ps1) 并编写了以下代码:

    param ([string] $ProjectDir, [string] $SolutionDir, [string] $SolutionName)
    
    Write-Host "ProjectDir --> " $ProjectDir
    Write-Host "SolutionDir -->" $SolutionDir
    Write-Host "SolutionName --> " $SolutionName
    
    $PathCustomerFileName = $SolutionDir + $SolutionName + "\" + $SolutionName + "\CustomerTarget.txt"
    
    Write-Host "PathCustomerFileName --> " $PathCustomerFileName
    
    $ConfigurationName = Get-Content $SolutionDir$SolutionName"\"$SolutionName"\CustomerTarget.txt"
    
    $CorrectCustomerName = "CustomerA","CustomerB" -Contains $ConfigurationName
    
    If ($ConfigurationName.length -gt 0 -And $CorrectCustomerName) {
    
        $Origin = $ProjectDir + "\Customers\" + $ConfigurationName + ""
        $Destination = $ProjectDir + "\Resources"
    
        robocopy $Origin $Destination /S
    
    } else {
        Write-Host "[ERROR] Error copying customer resources. Check ShellScript params and " $PathCustomerFileName " content file."
    }
    

它将文件从特定客户文件夹复制到“资源”文件夹项目。

  1. 我已经转到项目的属性:双击“属性”-> 编译事件-> 预构建,我已经设置了这个调用:

    PowerShell -File "$(ProjectDir)GetCustomerResources.ps1" $(ProjectDir) $(SolutionDir) $(SolutionName) 在此处输入图像描述

  2. 前面的这些步骤,我已经在每个平台项目(Android、iOS、...)中完成了它们。

  3. 然后,我在“便携式”项目中添加了一个“CustomerTarget.txt”文件,其中他的内容将是“CustomerA”或“CustomerB”。

  4. 重建解决方案,仅此而已!
于 2016-04-28T11:37:26.807 回答