Microsoft.Bcl пакет, използващ CallerMemberName, не успява да се изгради в Teamcity

Поех проект, който е насочен към .net4.

Един от проектите в рамките на решението използва System.Runtime.CompilerServices.CallerMemberNameAttribute от System.Runtime.dll, който се инсталира, когато използвате Microsoft BCL Portability Pack.

Проверих и в момента проектът използва версия 1.1.3.

Когато решението е изградено на локални машини за разработка, всичко се компилира без проблеми.

Сега се опитвам да вградя решението в teamcity, но когато TeamCity се опитва да компилира решението, получавам тази грешка. грешка CS0246: Името на типа или пространството от имена „CallerMemberName“ не може да бъде намерено (липсва ли ви директива за използване или препратка към асемблиране?) грешка CS0433: Типът „System.Runtime.CompilerServices.CallerMemberNameAttribute“ съществува и в двете „c:\Windows \Microsoft.NET\Framework\v4.0.30319\mscorlib.dll' и 'c:\apps\teamcity\buildAgent\work\bb8aacaa9fabeac8\packages\Microsoft.Bcl.1.1.3\lib\net40\System.Runtime.dll'

Прочетох отговора на Jon Skeets на този въпрос: Използване на атрибута CallerMemberName в преносима библиотека Но аз вече използвам BCL библиотеката.


person Darren Guy    schedule 05.06.2014    source източник
comment
Използването на сборките в c:\windows\microsoft.net е много, много сериозна грешка. Те вече не са подходящи да действат като правилни референтни модули, тъй като не могат да се насочат към конкретна версия на .NET 4.x. Вие трябва да използвате тези в c:\program files\reference assemblies, като изберете правилния набор, който съответства на вашата целева версия на рамката. Ако не го направите, това води до всякакви хаос, грешките в изграждането и изпълнението могат да бъдат много трудни за диагностициране. По-специално .NET 4.5.x е много несъвместим с .NET 4.0   -  person Hans Passant    schedule 09.06.2014
comment
Това е част от проблема. Този проект все още е насочен към .net 4. След като инсталирах Microsoft.Bcl, проверих и връзката към System.Runtime.dll препраща към D:\Projects\website\packages\Microsoft.Bcl.1.1.9\lib\net40 \System.Runtime.dll. Не препращам към dll директно в папката c:\windows\microsoft.net. Така че не разбирам защо, когато TeamCity компилира проекта, ми дава грешката   -  person Darren Guy    schedule 18.06.2014
comment
@DarrenGuy Имах подобна грешка; в моя файл packages.config версията на Microsoft.Bcl беше 1.1.10, но ако проверих пътя на файла на препратката към проекта, той всъщност използваше по-ранна версия на Bcl. Премахването и възстановяването на пакета NuGet поправи грешката. За съжаление не знам как препратката към проекта се е объркала на първо място, така че не искам да публикувам това като възможен отговор.   -  person GrahamMc    schedule 07.12.2016


Отговори (1)


След като отделих известно време за това, намерих друг въпрос, отговорен от Джон Скийт, който разреши този проблем. Кога трябва да използваме ключова дума extern alias в C#?

В рамките на моя проект, след получаване на връзките към пакета, за всяка dll трябваше да променя името на псевдонима. т.е. от глобално към новоглобално

След това в класовете, които използваха CallerMemberName, трябваше да направят следното В горната част на страницата, над изразите за използване

външен псевдоним newglobal;

И след това, когато препращате към CallerMemberName, въведете кода като

[newglobal::System.Runtime.CompilerServices.CallerMemberName]

Това позволява кодът да бъде успешно изграден в teamcity, където е инсталиран .net 4.5.

person Darren Guy    schedule 09.06.2014