2017-01-28 12 views
0

Используя обновление Visual Studio 2015 3, я создаю переносимую библиотеку классов. Затем я переключу его на целевой стандарт .NET.Почему добавление «импорта» в project.json нарушает это?

Так файл project.json выглядит в основном так:

"dependencies": { 
    "Microsoft.NETCore.Portable.Compatibility": "1.0.1", 
    "NETStandard.Library": "1.6.1" 
}, 
"frameworks": { 
    "netstandard1.3": { 
    } 
} 

В Class1.cs, который был создан, я добавляю простой метод, который использует метод Any() из Linq:

static void foo() 
{ 
    var x = new string[] { "hello", "world", }; 
    var q = x.Any(s => s.Contains("m")); 
} 

И все строит отлично.

Теперь я хочу, чтобы эта библиотека могла ссылаться на пакет nuget с профилем PCL, то есть тот, который не был обновлен до netstandard. Я понимаю, что мне нужно использовать раздел «import» в разделе «frameworks» файла project.json. Итак, я добавляю следующее:

"frameworks": { 
    "netstandard1.3": { 
    "imports": ".NETPortable,Version=v4.6,Profile=Profile151" 
    } 
} 

И никаких других изменений не внести.

Теперь сборка завершается с:

Ошибка CS1061 «строка []» не содержит определение для «любой» и не метод расширения «Любой» принимающий первый аргумент типа "строка [] может быть (вам не хватает директивы использования или ссылки на сборку?)

Похоже, что просто говоря, что мы можем принять профиль 151 PCL, сборка потеряла System.Linq.

Переход на netstandard 1.2 или 1.4 или 1.5, похоже, не имеет значения.

Изменение значения «импорта» для других профилей PCL, по-видимому, не имеет значения.

Изменение значения «импорта» в другой форме, что-то вроде «portable-net45 + win8 + wp8 + wpa81», похоже, не имеет значения.

Изменение значения «импорта» на «fubar» делает, что приводит к дополнительной ошибке в отношении недопустимой структуры, как и следовало ожидать.

Кто-нибудь знает, почему это происходит?

ответ

3

Я считаю, что вам нужен импорт в форме portable-win8+wpa81+wp8+net45 и т. Д. Не полный TFM, как вы его изложили. Он также принимает массив, поэтому вы можете указать более одного.

Кроме того, в то время как csproj + project.json «предполагается» работать в VS 2015, могут быть ошибки .... которые не будут исправлены.

Я настоятельно рекомендую использовать новейший VS 2017 RC и создать новую библиотеку стандартных классов .NET. Затем вы можете использовать <PackageTargetFallback>, чтобы указать требуемый запасной TFM (раздел ;)

+0

Хммм. Этот подход почти так же, как вы описали в https://oren.codes/2016/07/09/using-xamarin-forms-with-net-standard/ Кое-что, я полагаю, работал, когда вы его написали. –

+0

VS 2017 RC соблазняет меня, но (1) в примечаниях к выпуску говорится, что установка будет разорвать Xamarin на VS 2015, и (2) мне понадобится новый материал csproj/PackageReference для работы в Visual Studio для Mac, поскольку мы Там были члены команды. –

+1

Aha!Я думаю, что нашел проблему, расчесывая эту запись в блоге, упомянутую выше. У меня не установлен .NET Core. После того, как я установил .NET Core 1.0.1 VS 2015 tools preview 2, сборка работала. –

 Смежные вопросы

  • Нет связанных вопросов^_^