Jak zadeklarować Zgromadzenie przyjaciół?
Mam 2 projekty w moim rozwiązaniu:
- Assembly (Basic Library)
- Test Assembly (NUnit)
Zadeklarowałem test assembly jako friends assembly w pierwszym projekcie:
[assembly: InternalsVisibleTo ("Company.Product.Tests")]
Wszystko działało dobrze, dopóki nie zdałem sobie sprawy, że zapomniałem skonfigurować rozwiązanie do podpisywania moich zespołów. Tak powstał plik snk i skonfigurować projekt visual studio, aby podpisać pierwszy montaż (Biblioteka Podstawowa). Teraz kiedy kompiluję pierwszy projekt, dostaję następujący błąd:
Friend assembly reference "Firma.Produkt.Testy " są nieważne. Strong-name signed assemblies must określ klucz publiczny w ich Wewnętrzne deklaracje.
Próbowałem wyodrębnić klucz publiczny z mojego pliku snk za pomocą narzędzia sn, ale generuje on przewodowy plik binarny, którego nie jestem pewien, jak go użyć. Jak mogę rozwiązać problem?
3 answers
Musisz podpisać oba zespoły, ponieważ skutecznie oba zespoły odwołują się do siebie.
Musisz umieścić klucz publiczny w atrybucie InternalsVisibleTo. Na przykład w buforach protokołu używam:
[assembly:InternalsVisibleTo("Google.ProtocolBuffers.Test,PublicKey="+
"00240000048000009400000006020000002400005253413100040000010001008179f2dd31a648"+
"2a2359dbe33e53701167a888e7c369a9ae3210b64f93861d8a7d286447e58bc167e3d99483beda"+
"72f738140072bb69990bc4f98a21365de2c105e848974a3d210e938b0a56103c0662901efd6b78"+
"0ee6dbe977923d46a8fda18fb25c65dd73b149a5cd9f3100668b56649932dadd8cf5be52eb1dce"+
"ad5cedbf")]
Klucz publiczny jest pobierany przez uruchomienie
sn -Tp path\to\test\assembly.dll
/ Align = "left" / plik snk:
sn -p MyStrongnameKey.snk public.pk
sn -tp public.pk
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-30 18:24:13
Możesz bezpośrednio uzyskać dostęp do zgromadzeń, które Cię interesują, bez magii z sn.exe
<!-- language: c# -->
var assemblyName = Assembly.GetExecutingAssembly().GetName();
Console.WriteLine("{0}, PublicKey={1}",
assemblyName.Name,
string.Join("", assemblyName.GetPublicKey().Select(m => string.Format("{0:x2}", m))));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-08 13:01:51
Myślę, że trzeba wpisać mocną nazwę, która byłaby czymś w rodzaju " firma.Produkt.Testy, Wersja=1.0.0.0, Kultura = neutralny, PublicKeyToken = 17135d9fcba0119f". Zakładam Towarzystwo.Produkt.Tests to nazwa Twojego zestawu, a 17135d9fcba0119f to klucz publiczny.
Innym sposobem rozwiązania tego problemu byłoby nie używanie oddzielnych zespołów. Zwykle umieszczam kod źródłowy i kod testowy w tym samym zestawie. Nie wiem, czy macie jakieś szczególne obawy, które musicie rozdzielić. oni.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-14 06:14:02