Предотвращение использования мобильными проектами определенных файлов .cs в общем проекте

#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.

тьфу