Есть собранная сборка.Нужно вытащить из каких файлов собрана данная сборка.
Например есть файл 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 облазил, не нашел.
А релизную сборку попробуй посмотреть. Там будет путь к файлу?
в с++ это выглядит примерно так
// входные данные:
// 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
(смысл примерно тот же)