При выполнении в лабораторной работе упражнения №1 , а именно при выполнении нижеследующего кода: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Microsoft.Xna.Framework.Graphics;
namespace Application1 { public partial class MainForm : Form { // Объявим поле графического устройства для видимости в методах GraphicsDevice device;
public MainForm() { InitializeComponent();
// Подпишемся на событие Load формы this.Load += new EventHandler(MainForm_Load);
// Попишемся на событие FormClosed формы this.FormClosed += new FormClosedEventHandler(MainForm_FormClosed); }
void MainForm_FormClosed(object sender, FormClosedEventArgs e) { // Удаляем (освобождаем) устройство device.Dispose(); // На всякий случай присваиваем ссылке на устройство значение null device = null; }
void MainForm_Load(object sender, EventArgs e) { // Создаем объект представления для настройки графического устройства PresentationParameters presentParams = new PresentationParameters(); // Настраиваем объект представления через его свойства presentParams.IsFullScreen = false; // Включаем оконный режим presentParams.BackBufferCount = 1; // Включаем задний буфер // для двойной буферизации // Переключение переднего и заднего буферов // должно осуществляться с максимальной эффективностью presentParams.SwapEffect = SwapEffect.Discard; // Устанавливаем размеры заднего буфера по клиентской области окна формы presentParams.BackBufferWidth = this.ClientSize.Width; presentParams.BackBufferHeight = this.ClientSize.Height;
// Создадим графическое устройство с заданными настройками device = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, DeviceType.Hardware, this.Handle, presentParams); }
protected override void OnPaint(PaintEventArgs e) { device.Clear(Microsoft.Xna.Framework.Graphics.Color.CornflowerBlue);
base.OnPaint(e); } } } Выбрасывается исключение: Невозможно загрузить файл или сборку "Microsoft.Xna.Framework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=6d5c3888ef60e27d" или один из зависимых от них компонентов. Не удается найти указанный файл. Делаю все пунктуально. В чем может быть проблема? |
Работа с файлами и каталогами
В каталоге сборки bin оболочка создает еще один файл App4.vshost.exe, который используется для оптимизации отладки, поддержки политик безопасности, более детального контроля за работой приложения. Его создание для любого из режимов ( Debug и Release ) можно отключить в настройках оболочки.
- Откройте окно свойств проекта командой Project/App4 Properties и на вкладке Debug сбросьте внизу флажок Enable the Visual Studio hosting process
- В панели Solution Explorer щелкните на локальной пиктограмме Show All Files, разверните дерево каталогов проекта и удалите файл App4.vshost.exe
- Запустите приложение - теперь метаданные выводятся только для файла самой сборки App4.exe, поскольку файл App4.vshost.exe уже не создается
- В панели Solution Explorer командой Exclude From Project контекстного меню для файла AssemblyInfo.cs исключите его из текущего проекта и вновь запустите приложение
Мы видим, что метаданные в сборку на сей раз не попали.
- Верните через панель Solution Explorer файл AssemblyInfo.cs обратно в проект командой контекстного меню Include In Project, переименуйте его в произвольное имя (расширение .cs должно остаться!) и вновь запустите приложение - метаданные есть, значит имя файла с атрибутами дополнительной информации для компилятора несущественно, он их находит из общего входного потока компиляции
- Откройте файл AssemblyInfo.cs, командой Edit/Select All выделите все его содержимое и скопируйте в верхнюю часть файла Program.cs перед оператором ' namespace App4 '
- Удалите в панели Solution Explorer файл AssemblyInfo.cs физически командой Delete контекстного меню
- Запустите проект - метаданные существуют и их можно добалять непосредственно в коде в глобальном пространстве имен
Можно задаться вопросом, а куда же вшивается дополнительная информация в сборке? Давайте посмотрим, куда. Для этого проанализируем сборку дизассемблером ILDasm, который поставляется вместе с оболочкой и находится по адресу (например, на моем компьютере)
C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ildasm.exe
- Раскройте меню Tools оболочки и запустите ILDasm
Если такой команды не окажется, то ее следует добавить. Для этого:
- Выполните команду меню Tools/External Tools (внешние инструменты) и заполните диалоговое окно External Tools как показано на снимке
Теперь осталось воспользоваться инструментом ILDasm и проанализировать нашу сборку App4.exe на предмет просмотра ранее введенных атрибутов.
- Запустите дизассемблер ILDasm и командой File/Open откройте файл E:\Tmp\FilesAndDirectory\App4\bin\Debug\App4.exe (у меня такой...)
- Выполните команду View/MetaInfo/Show! (или выполните жест Ctrl+M ) - в конце документа окна MetaInfo будет секция Assembly, в которой и находятся введенные нами ранее атрибуты сборки
Вот примерно так будет выглядеть секция Assembly (несколько укороченная) в документе окна MetaInfo
Assembly ------------------------------------------------------- Token: 0x20000001 Name : App4 Public Key : Hash Algorithm : 0x00008004 Version: 1.0.0.1234 Major Version: 0x00000001 Minor Version: 0x00000000 Build Number: 0x00000000 Revision Number: 0x000004d2 Locale: <null> Flags : [none] (00000000) CustomAttribute #1 (0c000001) ------------------------------------------------------- CustomAttribute Type: 0a000001 CustomAttributeName: System.Reflection.AssemblyTitleAttribute :: instance void .ctor(class System.String) Length: 38 Value : 01 00 21 d0 9f d1 80 d0 b8 d0 bb d0 be d0 b6 d0 > ! < : b5 d0 bd d0 b8 d0 b5 20 41 70 70 34 20 28 54 69 > App4 (Ti< : 74 6c 65 29 00 00 >tle) < ctor args: ("Приложение App4 (Title)") CustomAttribute #2 (0c000002) ------------------------------------------------------- CustomAttribute Type: 0a000002 CustomAttributeName: System.Reflection.AssemblyDescriptionAttribute :: instance void .ctor(class System.String) Length: 52 Value : 01 00 2f d0 a7 d0 b8 d1 82 d0 b0 d0 b5 d1 82 20 > / < : d0 bc d0 b5 d1 82 d0 b0 d0 b4 d0 b0 d0 bd d0 bd > < : d1 8b d0 b5 20 28 44 65 73 63 72 69 70 74 69 6f > (Descriptio< : 6e 29 00 00 >n) < ctor args: ("Читает метаданные (Description)") CustomAttribute #4 (0c000004) ------------------------------------------------------- CustomAttribute Type: 0a000004 CustomAttributeName: System.Reflection.AssemblyCompanyAttribute :: instance void .ctor(class System.String) Length: 39 Value : 01 00 22 d0 a0 d0 be d0 b3 d0 b0 20 d0 b8 20 d0 > " < : ba d0 be d0 bf d1 8b d1 82 d0 b0 20 28 43 6f 6d > (Com< : 70 61 6e 79 29 00 00 >pany) < ctor args: ("Рога и копыта (Company)") CustomAttribute #5 (0c000005) ------------------------------------------------------- CustomAttribute Type: 0a000005 CustomAttributeName: System.Reflection.AssemblyProductAttribute :: instance void .ctor(class System.String) Length: 45 Value : 01 00 28 d0 a1 d1 83 d0 bf d0 b5 d1 80 d0 bf d1 > ( < : 80 d0 b8 d0 bb d0 be d0 b6 d0 b5 d0 bd d0 b8 d0 > < : b5 20 28 50 72 6f 64 75 63 74 29 00 00 > (Product) < ctor args: ("Суперприложение (Product)") CustomAttribute #6 (0c000006) ------------------------------------------------------- CustomAttribute Type: 0a000006 CustomAttributeName: System.Reflection.AssemblyCopyrightAttribute :: instance void .ctor(class System.String) Length: 35 Value : 01 00 1e 43 6f 70 79 72 69 67 68 74 20 c2 a9 20 > Copyright < : 20 32 30 31 30 20 28 43 6f 70 79 72 69 67 68 74 > 2010 (Copyright< : 29 00 00 >) < ctor args: ("Copyright © 2010 (Copyright)") CustomAttribute #7 (0c000007) ------------------------------------------------------- CustomAttribute Type: 0a000007 CustomAttributeName: System.Reflection.AssemblyTrademarkAttribute :: instance void .ctor(class System.String) Length: 36 Value : 01 00 1f d0 9d d0 b8 2d d0 91 d1 8d 2d d0 9d d0 > - - < : b8 2d d0 9c d1 8d 20 28 54 72 61 64 65 6d 61 72 > - (Trademar< : 6b 29 00 00 >k) < ctor args: ("Ни-Бэ-Ни-Мэ (Trademark)") CustomAttribute #10 (0c00000a) ------------------------------------------------------- CustomAttribute Type: 0a00000c CustomAttributeName: System.Reflection.AssemblyFileVersionAttribute :: instance void .ctor(class System.String) Length: 15 Value : 01 00 0a 31 2e 30 2e 30 2e 35 36 37 38 00 00 > 1.0.0.5678 < ctor args: ("1.0.0.5678") CustomAttribute #11 (0c00000b) ------------------------------------------------------- CustomAttribute Type: 0a00000d CustomAttributeName: System.Resources.NeutralResourcesLanguageAttribute :: instance void .ctor(class System.String) Length: 10 Value : 01 00 05 72 75 2d 52 55 00 00 > ru-RU < ctor args: ("ru-RU")
Более подробная информация о сборках приведена, например, в http://www.intuit.ru/department/internet/prdevwebms/19/