Errore del compilatore CS0281

Aggiornamento: novembre 2007

Messaggio di errore

L'accesso Friend è stato garantito a 'NomeAssembly1', ma l'assembly di output è denominato 'NomeAssembly2'. Aggiungere un riferimento a 'NomeAssembly1' o modificare il nome dell'assembly di output in modo che sia corrispondente.
Friend access was granted to 'AssemblyName1', but the output assembly is named 'AssemblyName2'. Try adding a reference to 'AssemblyName1' or changing the output assembly name to match.

L'accesso Friend è una nuova funzionalità di Common Language Runtime (CLR) che consente a un assembly di vedere i tipi non public di un altro assembly. Questo errore si verifica quando nell'assembly che garantisce l'accesso Friend è indicato un nome non corretto per l'assembly a cui è concesso l'accesso. Per ulteriori informazioni, vedere Assembly friend (Guida per programmatori C#).

Esempio

La seguente sequenza di esempi di codice genera l'errore CS0281.

Di seguito sono elencati i file generati e utilizzati per creare gli assembly con nome sicuro:

  • sn -d CS0281.snk

  • sn -k CS0281.snk

  • sn -i CS0281.snk CS0281.snk

  • sn -pc CS0281.snk key.publickey

  • sn -tp key.publickey

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

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

Il seguente codice di esempio genera l'errore CS0281:

Si noti che questo esempio consente di creare un file di output il cui nome è identico a quello del file di output del primo esempio. Per correggere l'errore, non modificare gli attributi dell'assembly per il componente e aggiungere la classe 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 {}