sonunda sorunu czdük. kahkaha attım tebrik ederim de insan bari şunu byle yapmak çzüm oldu yazar, kimseye faydası olmasa yarın dner bakar okur yaparsın hocam :D

sonunda sorunu czdük. Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.

Selam arkadaslar Xamarin. Forms ile yapilmis bir proje var. Ana proje'de bir constant tanimlayinca . oraya atiyorum yabancisurucu yaziyoruz ve proje icinde bazi kodlar/classlar o proje icin aktif oluyor. Bunu da conditional directive ile yapiyoruz #if yabancisurucu #else #endif seklinde. Tabi baska bir kac sey daha var ama onlar cok gerekli degil. Eger yabancisurucu constant olarak gelmisse, onun login metodu ayri, ama normalsurucu ise login metodu daha farkli. Simdi sorun ise unit test projesinde. Unit testler ayni solution altinda farkli bir proje'de yazilmis. Ben ana projede yabancisurucu sectigimde, unit test projesinde bunun ne oldugunu anlayamiyorum. O yüzden normalsurucu login test metodu calisiyor. Benim o metodu calistirmamam ya da yabancisurucu metodunu cagirmam lazim. Yani iki proje arasinda bu constant degeri bir sekilde tasimam gerekiyor. Simdi derseniz ki, test projesinde de bu constant'i olustur. O zaman da syle bir problem var; bunlar push edildikten sonra teamcity'e gidiyor. Orada da build ediliyor. Ve orada sadece unit test'i cagirinca yabancisurucu constant'i tanimlasak bile, nasil ana projeye o constant'i verecegiz? Daha karisik bir yapiya evriliyor. O yüzden ilk anlattigim sekilde bu isi czebilirsem benim icin harika olacak. Umarim anlasilmistir problem :) Fikirlerinizi bekliyorum. Not: Ana projede bir class var ve orada syle bir sey yaptim #if yabancisurucu appRuntimeInfo. AppType = AppType. YabanciSurucu; #else appRuntimeInfo. AppType = AppType. NormalSurucu; #endif appRunTimeInfo'ya proje icinde erisiyorum ve conditional directive yazmadan direk hangi tip oldugunu anliyorum. Bu degere test projesinde ulasmaya calistigimda bana hep NormalSurucu dnüyor nedense. Halbu ki define symbols'da yabancisurucu olarak ekli.. Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.

unbalanced bunu yazdı sonunda sorunu czdük. kahkaha attım tebrik ederim de insan bari şunu byle yapmak çzüm oldu yazar, kimseye faydası olmasa yarın dner bakar okur yaparsın hocam :D yazacaktim hocam da baya yoruldum, kac saattir bunla ugrasiyorduk. Aslinda burdan kimsenin pek isine yaracagini sanmam ama kisaca syle bir tane customdefineconstants olusturduk hem debug hem unittest isminde bir configuration icin . ve localde denerken de syle yaptik build icin msbuild proje. sln /t:Clean, Restore, Build /p:Configuration=UnitTest /p:Platform="Any CPU" /p:CustomDefineConstants=yabancisurucu dotnet test --configuration=UnitTest /p:Platform="Any CPU" /p:CustomDefineConstants=yabancisurucu bu sekilde calisiyor. Test projesinde #if yabancisurucu Assert. True ; #else // normal sürücü icin kodlar #endif yaptik, bu sekilde sorun olmadan yabancisurucu'yu aliyor. Isin team city tarafinda ise; build stepsler var, orada da build ve test admina üstteki kodlari ve parametreleri gectik. Otomatik olacagi icin /p:CustomDefineConstants=%env. AppType% seklinde yaptik ki build edilirken hangi tür oldugunu sectigimizde burdan otomatik alsin diye :) Burada dikkat edilmesi gereken nemli bir nokta ise; sln dosyasinda "Any CPU" seklinde yazilan platform, csproj'lerde AnyCPU seklinde yaziliyor. Bu tarz scriptler vs ugrasiyorsaniz bu farki gzetmeniz gerek. Eger sln 'yi build edecekseniz platform' yazarken Any CPU seklinde olmali, csproj build edecekseniz de platform verirseniz AnyCPU seklinde olmali. Benzer sikintiyi 7 yil nce de TFS'de benzer isleri yaparken yasamistim :) Sorun bu sekilde czüldü. Tabi bu asamaya gelmek icin cok deneme yanilma yaptik ama olay bu :) Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.