Soru Kaynak dosyaları (resx) ad alanı ve erişim değiştirici değiştirme


Web projemde 4 kaynak dosyası kullanıyorum App_GlobalResources Klasör. Onlardan biri (lang.resx) projeye gelmeden önce oluşturuldu. Doğru isim alanına sahip (WebApplication.App_GlobalResources) ve erişim değiştirici: public.

Diğer taraftan, yeni oluşturduğum diğer üç Kaynak dosyası farklı bir ad alanına sahip (Resources) ve internal erişim değiştirici ve Visual Studio'dan Kaynak Dosya Formunda değiştiremiyorum çünkü devre dışı. Doğrudan designer.cs dosyasında değiştirmeye çalışırsam, dosyanın bir sonraki kaydında değişiklikler iptal edilir.

Bu kritik bir hata değildir, ancak projedeki diğer geliştiriciler için kullanacakları kaynak dosyaları için farklı ad alanları ve erişim düzenleyicileri bulma konusunda yanıltıcı olabilir.


44
2017-08-26 09:08


Menşei




Cevaplar:


Sorunun henüz nerede yattığından emin değilim, ancak kodu üretmek için kullanılan aracı değiştirerek çözebileceğinizi söyleyebilirim.

Takip etmeye çalıştığımda Bu makaleBen de bu problemin üzerine çıkmıştım. Kaynak dosyaları yazarın önerdiği şekilde indirdikten sonra, halihazırda var olan kaynak dosyasının "Özel Araç" özelliğinde şu sınıfta olduğunu fark ettim: "PublicResXFileCodeGenerator". Ayrıca, "Oluşturma Eylemi" özelliği "Gömülü Kaynak" olarak ayarlandı, ancak sorunun bir parçası olup olmadığından emin değilim.

Oluşturduğum herhangi bir yeni kaynak dosyası "GlobalResourceProxyGenerator" özel aracını kullandı. Daha önce bahsedilen "PublicResXFileCodeGenerator" ile üzerine yazdıktan sonra, problemi çözmüş görünüyordu, gerçek sorun ne olursa olsun.

Ayrıca mevcut kaynak dosyanın "2.0" formatında olduğunu, yeni dosyaların ise "1.3" formatında olduğunu fark ettim. Resx dosyasını bir XML düzenleyicisi kullanarak (veya görsel stüdyonun kendisiyle "açık" yı kullanarak) açtığınızda bunu görebilirsiniz.

Umarım bu şekilde çalışabilirsin, ama ideal değil. Visual Studio 2008 ve SP1 ile bir yükleme sorunu veya bunun gibi bir şey olması muhtemeldir.

Güncelleştirme:

Bu blog girişi ayrıca yardımcı olabilir.


44
2017-09-24 07:45



Çok kullanışlı blog girişi. Teşekkürler! - ongle
Bu, VS2010'da da olur: projeye bir resx dosyasını kopyalama veya yapıştırma sorunu olabilir, eğer bunu yaparsanız, .Resx dosyasını GlobalResourceProxyGenerator'a ayarlar. - Chris S


Hızlı cevap şudur: Kaynak dosyasının Özelliklerini açın ve Custom Tool Namespace İhtiyacınız olan ad alanına.
Bu kadar basit.


52
2017-09-14 13:30



VS2012 için en basit cevap - Jeff Paquette


Veya CustomTool özniteliğini değiştirebilirsiniz (VS2010'da test edilmiştir).

Sadece kaynak dosyanın dosya özelliklerini açmanız ve   “GlobalResourceProxyGenerator” dan “Özel Aracı” nı değiştirmek   Yerel için varsayılan Araç olan “PublicResXFileCodeGenerator”   kaynak dosyaları. Ardından, “Oluşturma Eylemi” ni değiştirmek zorundasınız.   “Gömülü Kaynak”. Ayrıca uygun bir özel araç atamak da isteyebilirsiniz   Dosyaya doğru bir şekilde erişmek için “Kaynaklar” gibi ad alanı, ancak   Bu gerekli değil ...

Kaynak


11
2017-07-02 07:45



ASP.NET'i kullanırken dikkat edin, çünkü "Gömülü Kaynak" ile yayınlarken bu, sunucuda yayınlanmayabilir. "İçerik Oluştur", "İçerik" olarak iyi çalışıyor ancak - Wagner Leonardi


Resx, Visual Studio proje yapılandırmanızda belirtilen ad alanına bağlı olarak ad alanını alır. Projenizi doğru ad alanına sahip olacak şekilde güncelleyin ve resx onu miras almalıdır (yeni olanlar kesin, mevcut olanların düzeltilip düzeltilmeyeceğinden emin olmamalıdır).


6
2017-08-26 10:06



varsayılan proje ad alanı iyi görünüyor: WebApplication - Michael Pereira


Kaynak Dosyaları erişim değiştiricileri .csproj;

Doğrudan değişen .csproj dosya bu sorunu geçici çözüm bulmalıdır.

Aramak <Generator> aşağıdaki örneklere uygun olarak öğeyi ayarlayın ve değerini ayarlayın:

İle bir kaynak dosyası internal değiştirici böyle görünüyor

<ItemGroup>
 <EmbeddedResource Update="resources.resx">
  <Generator>ResXFileCodeGenerator</Generator>
  <LastGenOutput>resources.Designer.cs</LastGenOutput>
 </EmbeddedResource>
</ItemGroup>

bir kaynak dosyası ile public değiştirici böyle görünüyor.

<ItemGroup>
 <EmbeddedResource Update="resources.resx">
  <Generator>PublicResXFileCodeGenerator</Generator>
  <LastGenOutput>resources.Designer.cs</LastGenOutput>
 </EmbeddedResource>
</ItemGroup>

4
2018-03-21 13:32



Cevabınızı genişletirseniz bu da yardımcı olur. nerede içinde .csproj birinin bakması gerekiyordu. Anlayabildiğim kadarıyla, farklı bir jeneratörün kullanılması (PublicResXFileCodeGenerator yerine ResXFileCodeGenerator). Bu da VS 'Properties penceresinde düzenlenebilir olmalıdır .resx proje öğesi. - stakx
teşekkürler @stakx; önerildiği gibi örnekler ekledim - Luis Filipe