Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C# для профСссионалов. Π’ΠΎΠΌ IIΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 139

Автор Π‘ΠΈΠΌΠΎΠ½ Робинсон

C# прСдоставляСт совсСм Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ для ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ классов Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ всС Ρ„Π°ΠΉΠ»Ρ‹ C# Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ станут Ρ‡Π°ΡΡ‚ΡŒΡŽ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ компиляции ΠΏΡ€ΠΈ использовании VS.NET. Если примСняСтся командная строка, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡƒΠ΄Π΅Ρ‚ явно Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ компиляции, ΠΊΠ°ΠΊ описано Π²Ρ‹ΡˆΠ΅.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠΎΠ΄ΠΎΠ² ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Π Π• (portable executable β€” пСрСносимый исполнимый) Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»Π°. НСобходимо Π² этом мСстС ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ ΠΊΠΎΠ΄ΠΎΠ², ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ, ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Class Library Π² C#, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ IDE VS.NET. Под Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ ΠΊΠΎΠ΄Π° понимаСтся ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ мноТСство Ρ„Π°ΠΉΠ»ΠΎΠ² C#, соСдинСнных вмСстС Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ компиляции, поэтому происходит ссылка Π½Π° Ρ„Π°ΠΉΠ» Π Π•, Π° Π½Π΅ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ DLL ΠΈΠ»ΠΈ Π•Π₯Π•. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΊΠΎΠ΄Π° Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° Π±ΠΎΠ»Π΅Π΅ часто называСтся сборкой, поэтому это Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² дальнСйшСм, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹.

Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ» JAR, сборка ΠΈΠΌΠ΅Π΅Ρ‚ манифСст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСт Π΅Π΅ содСрТимоС. ΠœΠ°Π½ΠΈΡ„Π΅ΡΡ‚ сборки C# Π΄Π΅Π»Π°Π΅Ρ‚, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большС. Он содСрТит всС ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ (ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π°Ρ, ΠΊΠ°ΠΊ связаны элСмСнты сборки), Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для опрСдСлСния Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ вСрсии, идСнтичности бСзопасности ΠΈ всСй ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, слуТащСй для опрСдСлСния области дСйствия сборки ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ссылок Π½Π° рСсурсы ΠΈ классы. ΠœΠ°Π½ΠΈΡ„Π΅ΡΡ‚ сборки ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π»ΠΈΠ±ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ Π Π• (Π•Π₯Π• ΠΈΠ»ΠΈ DLL) с ΠΊΠΎΠ΄ΠΎΠΌ IL, Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Π½Π½Ρ‹Π΅ манифСста сборки. Π’ .NET пространства ΠΈΠΌΠ΅Π½, содСрТащиСся Π²Π½ΡƒΡ‚Ρ€ΠΈ сборки, прСдставлСны Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ ΠΌΠΈΡ€Ρƒ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Π»ΡŽΠ±Ρ‹ΠΌ потрСбитСлям сборки, Ρ‚Π°ΠΊΠΈΠΌ, ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ сборки) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ Ρ‚ΠΈΠΏΠ°Ρ…, хранящСйся Π² манифСстС сборки.

ΠšΠ»Π°ΡΡΡ‹ Π² namespace_samples.cs ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

CSC /target:library /out:FirstLibrary.dll namespace_samples.cs

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ сборки доступной для Π΄Ρ€ΡƒΠ³ΠΈΡ… сборок, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π° ΠΊΠ»ΡŽΡ‡Π° компилятора: /addmodule ΠΈ /reference. Они ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ сути ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ /reference ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для сборок с манифСстом сборки, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ /addmodule ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для сборок Π±Π΅Π· манифСста сборки (ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ манифСста сборки). Бинтаксис для добавлСния Π²Π½Π΅ΡˆΠ½ΠΈΡ… ссылок ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

csc /reference: <lib.dll>; <libn.cs> <filename.exe>

ΠΈΠ»ΠΈ:

csc /addmodule: <lib.dll>; <libn.cs> <filename.exe>

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ этого с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ VS.NET, сдСлайтС Ρ‰Π΅Π»Ρ‡ΠΎΠΊ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π½Π° ΠΏΠ°ΠΏΠΊΠ΅ References своСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² Solution Explorer ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Add Reference. ΠŸΠΎΡΠ²ΠΈΡ‚ΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, содСрТащСС ряд доступных ссылок ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму Π² поисках ссылок. МоТно Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ это Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, выбирая ΠΏΡƒΠ½ΠΊΡ‚ Add Reference ΠΈΠ· мСню Project, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ссылки Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ сборку ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ упомянутый Ρ„Π°ΠΉΠ» Π² ΠΏΠ°ΠΏΠΊΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ новая сборка.

Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ потрСбитСля для Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ AddLib, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ созданному Ρ€Π°Π½Π΅Π΅ классу JavaFrame:

// LibConsumer.cs

namespace Com.CSapp {

 using System;

 using System.Windows.Forms;

 using Com.CsLib;

 public class Form1 : System.Windows.Forms.Form {

  public Form1() {

   AddLib al = new AddLib();

   this.Text = "C# Form version " + al.operationAdd(12, 23);

  }

  public override void Dispose() {

   base.Dispose();

  }

  Static void Main(string[] args) {

   Form1 f1 = new Form1();

   Application.Run(f1);

  }

 }

}

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки со ссылкой Π½Π° FirstLibrary.dll, ввСдя ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

csc /reference: FirstLibrary.dll /target:exe /out:EmptyForm.exe LibConsumer.cs

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ VS.NET, Π½Π°Π΄ΠΎ сначала ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π½Π° FirstLibrary.dll, ΠΊΠ°ΠΊ описано Ρ€Π°Π½Π΅Π΅, ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Когда ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ собрано, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π΅Π³ΠΎ. Оно Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Windows с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ C# form Version 35.

ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

ΠœΡ‹ ΡƒΠΆΠ΅ обсудили, ΠΊΠ°ΠΊ JRE Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ссылки Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ классы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π²ΠΎ врСмя выполнСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния Classpath. CLR ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ряд шагов, часто Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π·ΠΎΠ½Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ (probing), ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π½Π°ΠΉΡ‚ΠΈ сборку ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ссылку Π½Π° сборку. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ EmptyForm.exe ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ряд Π²Π΅Ρ‰Π΅ΠΉ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ вСсь управляСмый ΠΊΠΎΠ΄ загруТаСтся Π² Π΄ΠΎΠΌΠ΅Π½ прилоТСния ΠΈ обрабатываСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. Π£ΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ сборки, ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΈΡ… Ρ‚ΠΈΠΏΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ΄Π΅ Π΄ΠΎΠΌΠ΅Π½Π° прилоТСния, Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ. CLR ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ нСсколько стадий, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΈ ΡΠ²ΡΠ·Π°Ρ‚ΡŒΡΡ с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ сборкой.

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ соСдинСнию со сборками ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° основС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π° прилоТСния, Ρ„Π°ΠΉΠ»Π° издатСля ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΌΠ°ΡˆΠΈΠ½Ρ‹/администратора, CLR Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ€Π°Ρ‚ΡŒ эту ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ вСрсии ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ сборки. ВсС эти Ρ„Π°ΠΉΠ»Ρ‹ основаны Π½Π° XML ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΏΠΎΡ…ΠΎΠΆΠ΅ΠΌΡƒ синтаксису. Они ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ‚Π°ΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ связывания, располоТСниС ΠΊΠΎΠ΄Π° ΠΈ Ρ€Π΅ΠΆΠΈΠΌΡ‹ связывания для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… сборок. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ вСрсия сборки опрСдСляСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ Ρ‚Ρ€Π΅Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ собствСнным манифСстом сборки.

CLR сначала провСряСт, Π½Π΅ пСрСопрСдСляСт Π»ΠΈ информация ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° прилоТСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, которая хранится Π² манифСстС Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ сборки. Π—Π°Ρ‚Π΅ΠΌ CLR провСряСт ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» издатСля. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» присутствуСт, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π½ΠΎΠ²Ρ‹ΠΌΠΈ вСрсиями ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² прилоТСния. Π­Ρ‚ΠΎ ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для пСрСопрСдСлСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ прилоТСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Π±Ρ€Π°Π»ΠΎ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. CLR Π·Π°Ρ‚Π΅ΠΌ провСряСт ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΌΠ°ΡˆΠΈΠ½Ρ‹/администратора. Π₯отя ΠΎΠ½ просматриваСтся послСдним, настройки, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² этом Ρ„Π°ΠΉΠ»Π΅, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊΠΎ всСм Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ настройкам. По сути администраторы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ admin.cfg, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ограничСния связывания, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ для Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹.

Π—Π°Ρ‚Π΅ΠΌ CLR Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΉΡ‚ΠΈ сборку. Π’ Java JRE Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΈ Π² classpass, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ класс, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ссылки. Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ располоТСния Π·Π°Π΄Π°Π½Π½ΠΎΠΉ сборки CLR полагаСтся Π½Π° элСмСнт <codeBase>, связанный с упомянутыми Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Если Ρ‚Π°ΠΊΠΎΠΉ элСмСнт Π½Π΅ прСдоставлСн, Ρ‚ΠΎ CLR ΠΈΡ‰Π΅Ρ‚ Ρ„Π°ΠΉΠ» (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ probing) Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ прилоТСния, Π²ΠΎ всСх ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ…, пСрСчислСнных Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… элСмСнта <probing> ΠΈ Π²ΠΎ всСх ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ… корня прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ имя, ΠΊΠ°ΠΊ ΠΈ зондируСмая сборка. Π­Ρ‚ΠΈ элСмСнты всСгда ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° прилоТСния. ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ CLR всСгда ΠΈΡ‰Π΅Ρ‚ имя сборки, соСдинСнноС с двумя допустимыми Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Π Π• β€” .exe ΠΈ .dll.

НаконСц, Ссли ссылка сдСлана Π½Π° сборку с устойчивым ΠΈΠΌΠ΅Π½Π΅ΠΌ, CLR Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ Π² глобальном кэшС сборок. УстойчивыС ΠΈΠΌΠ΅Π½Π° ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ кэш сборок ΠΌΡ‹ рассмотрим Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

Π‘Ρ‚Ρ€ΠΎΠ³ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ кэш

УстойчивоС (строгоС) имя Π΄Π΅Π»Π°Π΅Ρ‚ сборку глобально ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ. Оно состоит ΠΈΠ· ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° сборки, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° ΠΈ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ подписи. Π’Π°ΠΊ ΠΊΠ°ΠΊ сборка, созданная с ΠΎΠ΄Π½ΠΈΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ имя, Ρ‡Π΅ΠΌ сборка, созданная с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, Ρ‚ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΈ сборки Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π°. НСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ сборку с устойчивым ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½Π΅ имСя доступа ΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΈ Π΅Π΅ создании, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, устойчивоС имя Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ смоТСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ вСрсии этой сборки. УстойчивыС ΠΈΠΌΠ΅Π½Π° ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ТСсткий ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ цСлостности. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ устойчивого ΠΈΠΌΠ΅Π½ΠΈ являСтся Π΄Π²ΡƒΡ…ΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΌ процСссом. Π‘Π½Π°Ρ‡Π°Π»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΡƒΡŽ ΠΏΠ°Ρ€Ρƒ. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

sn -k <имя Ρ„Π°ΠΉΠ»Π° ΠΊΠ»ΡŽΡ‡Π°>

НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΊΠ»ΡŽΡ‡Π° examplekey.key, Π½Π°Π΄ΠΎ ввСсти:

sn -k examplekey.key

ПослС создания Ρ„Π°ΠΉΠ» ΠΊΠ»ΡŽΡ‡Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для присвоСния устойчивого ΠΈΠΌΠ΅Π½ΠΈ сборкС двумя способами. Из ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ alink ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

al /keyfile: <имя Ρ„Π°ΠΉΠ»Π° ΠΊΠ»ΡŽΡ‡Π°> <имя сборки>

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ для FirstLibrary.dll строгоС имя, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ:

al /keyfile:examplekey.key FiretLibrary.dll

ΠΈΠ»ΠΈ Π² VS.NET ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ [assembly: AssemblyKeyFile("")] Π² Ρ„Π°ΠΉΠ»Π΅ AssemblyInfo.cs. Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ просто ΠΏΡƒΡΡ‚ΡƒΡŽ строку Π½Π° строку, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ имя Ρ„Π°ΠΉΠ»Π° ΠΊΠ»ΡŽΡ‡Π°. Π‘Π±ΠΎΡ€ΠΊΡƒ FirstLibrary.dll ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Ρ‚Π΅ΠΌ Π°ΡΡΠΎΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, мСняя Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ AssemblyKeyFile Π½Π° [assembly: AssemblyKeyFile("examplekey.key")]. Какой Π±Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½ΠΈ использовался, ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ получаСтся Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый. CLR Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ Π² Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Crypto Service Provider (CSP). Π Π°Π±ΠΎΡ‚Π° CSP Π½Π΅ прСдставлСна Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.