2014-10-02 2 views
0

У меня есть проект библиотеки классов, который на диске составляет 14,0 КБ. возможно ли увеличить размер файла сборки, добавив баны-баны ?.Как увеличить размер сборки C#?

Например:

private byte[] junk = new byte[1500]; 

будет выделить 1500 байт в памяти, но я хочу, чтобы они были защищены в любой секции PE модуля (например, секции .data).

Я знаю, что C# работает с MSIL, но есть ли возможность перезагрузить физическую память ?.

Зачем мне это нужно? Хорошо, клиент попросил меня подражать библиотеке, которую он имел от предыдущего разработчика по функциональности и в каждой детали, которую он мог найти, и который включает в себя размер файла, имя, версию и т. Д. Я объясню ему, что любой, у кого есть приличные знания, обнаружит, что библиотека а не оригинал, но он настаивает на том, чтобы соответствовать ему на каждой детали.

У меня есть идея, почему он нужен, но это из темы.

+0

Возможно, слияние ресурсов или других сборок? – Mephy

ответ

5

Чтобы увеличить размер сборки, вы можете добавить изображение в ресурсы (дважды щелкните по resosurces.resx) или добавьте ссылки.

Я предлагаю вам добавить некоторые поддельные фотографии, это наименее худшее решение :-)

enter image description here

, например

enter image description here

+0

Я просто добавляю текстовый файл, чтобы заполнить требуемый файл и пометить его как встроенный ресурс. Его очень хромое решение, я бы хотел знать, как сообщить MSIl зарезервировать физический размер. Но пока это работает – ffenix

5

Самый простой способ, вероятно, добавить встроенный ресурс.

+0

I второй это понятие. Просто создайте поддельное растровое изображение, которое добавит необходимый размер и добавит его как внедренный ресурс (вам может потребоваться вычесть некоторые байты для учета кода/дополнения встроенного ресурса. –

1

Теоретически, так как .Net DLL файлы и Exe являются стандартные PE Файлы, которые придерживаются microsoft PE Формат файла

http://download.microsoft.com/download/e/b/a/eba1050f-a31d-436b-9281-92cdfeae4b45/pecoff.doc

Вы должны иметь возможность просто поместить 0 байт в конец файла, так как Спецификация включает в себя использование размеров блоков и смещений указателя, конец файла не учитывается при загрузке и добавляет 0 байт к конец его без изменения любого из размеров или смещений не должен влиять на загрузку/привязку dll.

Это всего лишь теория. Я не пробовал/не тестировал это.

Если это работает, вы могли бы просто написать простое консольное приложение Padd файл по х 0 байт, что-то вроде

Console.Write("Enter File Name To Pad: "); 
string fileName = Console.ReadLine(); 
Console.Write("Enter Number of Bytes to Pad: "); 
int bytesToPad = Int.Parse(Console.ReadLine()); 
using (FileStream fs = new FileStream(fileName, FileMode.Append, FileAccess.Write, FileShare.None)) 
{ 
    byte[] emptyBytes = new byte[bytesToPad]; 
    fs.Write(emptyBytes, 0, emptyBytes.Length); 
} 

Если это работает, вы можете изменить его, чтобы получить имя файла и байты из args передается в главную функцию, а затем настраивается как событие Post Build в Visual Studio, которая запускается после завершения кода.

Смежные вопросы