Ошибка компилятора CS0281Compiler Error CS0281

"Имя_сборки1" получил дружественный доступ, однако результирующая сборка имеет имя "Имя_сборки2".Friend access was granted to 'AssemblyName1', but the output assembly is named 'AssemblyName2'. Попробуйте добавить ссылку на "имя_сборки1" или соответствующим образом изменить имя результирующей сборки.Try adding a reference to 'AssemblyName1' or changing the output assembly name to match.

Дружественный доступ — это новая возможность среды CLR, предоставляющая сборке доступ к закрытым типам другой сборки.Friend access is a new common language runtime (CLR) feature that enables an assembly to see another assembly's non-public types. Эта ошибка возникает в том случае, когда сборка, предоставляющая дружественный доступ, указывает неправильное имя сборки, которой этот доступ предоставляется.This error occurs when the assembly granting friend access specifies the wrong name for the grantee assembly. Дополнительные сведения см. в разделе Дружественные сборки.For more information, see Friend Assemblies.

ПримерExample

Приведенная ниже последовательность образцов кода приводит к возникновению ошибки CS0281.The following sequence of code samples will generate CS0281.

Файлы, используемые для создания сборок со строгими именами, создаются следующим образом:The files used to create the strong named assemblies are generated as follows:

  • sn -d CS0281.snksn -d CS0281.snk

  • sn -k CS0281.snksn -k CS0281.snk

  • sn -i CS0281.snk CS0281.snksn -i CS0281.snk CS0281.snk

  • sn -pc CS0281.snk key.publickeysn -pc CS0281.snk key.publickey

  • sn -tp key.publickeysn -tp key.publickey

// CS0281.cs  
// compile with: /target:library /keyfile:CS0281.snk  
public class A {}  

ПримерExample

// CS0281_b.cs  
// compile with: /target:library /keyfile:CS0281.snk /reference:CS0281.dll  
[assembly:System.Runtime.CompilerServices.InternalsVisibleTo("CS0281, PublicKey=00240000048000009400000006020000002400005253413100040000010001004b2d4d56af7c50be2fcbbf97cb880b9e73ad84467a587191fef63aadc118a96cecf9d508cd679c907b6e20f71684300bdc2c0a851019af0c96b29bf8f1339753276041aefd67db46139e6348b3a12f29537b4dc6c2c19829df2c9ed6803f3c63c3b84cfa2728849386aea575c543a5f70fa85793d2946f15f7fe1ccb0c5e8fe0")]  
class B : A {}  

ПримерExample

Приведенный ниже пример приводит к возникновению ошибки CS0281.The following sample generates CS0281.

Обратите внимание на то, что этот образец кода создает выходной файл с тем же именем, что и у выходного файла в первом примере.Notice that this sample creates an output file with the same name as the output file in the first sample. Чтобы решить эту проблему, не изменяйте атрибуты сборки компонента и добавьте класс С.To resolve, do not change the assembly attributes of the component and add class C.

// CS0281_c.cs  
// compile with: /target:library /out:CS0281.dll /keyfile:CS0281.snk /reference:CS0281_b.dll  
// CS0281 expected  
[assembly:System.Reflection.AssemblyVersion("3")]  
[assembly:System.Reflection.AssemblyCulture("en-us")]  
class C : B {}  
public class A {}