#c# #android #ios #visual-studio #shared-project
#c# #Android #iOS #visual-студия #shared-project #visual-studio
Вопрос:
Я создаю мобильное приложение. В моем решении у меня есть общий проект. Некоторые файлы, которые я не хочу использовать в своих сборках для iOS или Android.
Мой код выглядит примерно так:
#if __MOBILE__
#else
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Queues;
using Azure.Storage.Queues.Models;
using System;
namespace Blah.Utils
{
public static class AzureBlobService
{
public static async Task<string> CreateCloudQueue(string connectionString, string queueName)
{
// blah
}
}
}
#endif
Похоже, это не приводит к удалению этого файла для моих мобильных приложений. Он все еще хочет, чтобы я получил эти
nuget Azure.Пакеты хранения. Как я могу заставить этот #if работать так, как я хочу?
Комментарии:
1. Вы установили
__MOBILE__
значение true в этих сборках?2. Хм, как вы устанавливаете для него значение true? После возни с it…it похоже, что для МОБИЛЬНОГО устройства установлено значение false? (Другими словами, если я помещу #else в строку прямо над #endif, это сработает.)
3. ДА. Но вы же не хотите менять код каждый раз при сборке для разных целей, не так ли? В Visual Studio вы можете настроить различные профили сборки для своего проекта. По умолчанию используются debug и release . Но вы можете добавить больше. И в этих профилях вы можете установить такие переключатели, как этот.
4. В моих сборках Android и iOS я никогда не захочу использовать файл, который я показал выше. Я перешел к символам свойств / сборки / условной компиляции Android и поместил текст MOBILE как в debug, так и в release. Я предполагаю, что когда-то я это сделал… что он должен установить для МОБИЛЬНОГО устройства значение true? Но для него вообще не установлено значение true. Похоже, это ничего не делает.
5. Когда я помещаю встроенный символ ОТЛАДКИ, он работает так, как ожидалось.
Ответ №1:
Ну, после долгой борьбы с этим и мысли, что это должно быть какая-то неясная настройка somewhere…it это было потому, что на мою общую библиотеку ссылался проект между моим проектом мобильного приложения.
Другими словами, проекты ссылались друг на друга следующим образом: Sharedproject <— CoreLib proj <— Mobile app proj
И я не помещал MOBILE в «Условный символ компиляции» в свойствах CoreLib proj.
тьфу