сборка
От: Аноним  
Дата: 25.06.09 06:39
Оценка:
Есть собранная сборка.Нужно вытащить из каких файлов собрана данная сборка.
Например есть файл Test.cs, с исходником:

using System;
namespace Instruction
{
    public class My
    {        
        public void Test()
        {                         
        }
    }           
}


Если посмотреть, через ildasm :
.method public hidebysig instance void  Test() cil managed
{
  // Размер кода:       2 (0x2)
  .maxstack  8
  .language '{3F5162F8-07C6-11D3-9053-00C04FA302A1}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}'
// Source File 'C:\FlowAnalys\Unsys.testcases\Test\Instruction\Test.cs'
//000071:         {            
  IL_0000:  nop
//000072:         }
  IL_0001:  ret
} // end of method My::Test


В коментах, видим строчку // Source File 'C:\FlowAnalys\Unsys.testcases\Test\Instruction\Test.cs', не знаю как вытащить эту строку.
Думал, может есть из стандартных средств, который возвращает из каких файлов собрана сборка, reflection облазил, не нашел.
Re: сборка
От: Ellin Россия www.rsdn.ru
Дата: 25.06.09 06:42
Оценка:
А релизную сборку попробуй посмотреть. Там будет путь к файлу?
Re: сборка
От: Ovl Россия  
Дата: 25.06.09 06:59
Оценка: 1 (1)
в с++ это выглядит примерно так
// входные данные:
//   module : ModuleID - ид модуля сборки
//   methodDef : mdToken - токен (идентификатор) какого-то метода из этой сборки
//   profilerInfo : ICorProfilerInfo

// создаем биндер 
ISymUnmanagedBinder2* binder;

CoCreateInstance(CLSID_CorSymBinder_SxS, IID_ISymUnmanagedBinder2, (void**) &m_binder);
if(!binder) return;

CComPtr<IMetaDataImport> mdImport;

//получаем метаданные для модуля
HRESULT hr = profilerInfo->GetModuleMetaData(module, ofRead, IID_IMetaDataImport, (IUnknown**) &mdImport);
if(S_OK != hr) return;
    
CComPtr<ISymUnmanagedReader> symReader);
ULONG searchPolicy = AllowRegistryAccess | AllowSymbolServerAccess | AllowOriginalPathAccess | AllowReferencePathAccess;

//получаем "pdb" ридер
binder->GetReaderForFile2(mdImport, moduleName, NULL, searchPolicy, &symReader);
if (!symReader) return;

mdToken methodDef; // = какой-либо-методный-токен
CComPtr<ISymUnmanagedMethod> symMethod;
hr = symReader->GetMethod( methodDef, &symMethod );

// далее используем symMethod->GetSequencePointCount и symMethod->GetSequencePoints для получения точек ветвления и соответственно ссылок на файлы

но этот код специфичен для конкретной ситуации, не стоит его пользовать — смысла нет, да и ICorProfilerInfo вы не получите.
а вот ребята в Немерле делали подобное — можно начать поиск отсюда
Автор: Блудов Павел
Дата: 10.10.06
(смысл примерно тот же)
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re: сборка
От: Аноним  
Дата: 25.06.09 07:00
Оценка:
вопрос снят, подключил файл символов отладки, все что нужно вытащил.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.