Опубликован: 05.08.2010 | Доступ: свободный | Студентов: 2008 / 46 | Оценка: 4.50 / 4.40 | Длительность: 60:26:00
Лекция 5:

Работа с файлами и каталогами

В каталоге сборки 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/

Алексей Бабушкин
Алексей Бабушкин

При выполнении в лабораторной работе упражнения №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" или один из зависимых от них компонентов. Не удается найти указанный файл.

Делаю все пунктуально. В чем может быть проблема?