Инструмент для выравнивания (упрощения) C # Source - PullRequest
1 голос
/ 10 января 2012

Мне нужно предоставить копию исходного кода третьей стороне, но, учитывая, что это изящная расширяемая среда, которую можно легко переназначить, я бы предпочел предоставить менее ОО-версию («процедурную» версию из-за недостаткалучший термин), который позволил бы незначительные изменения значений и т. д., но не переопределение, используя полную гибкость того, как это в настоящее время структурировано.

Код использует обычные вещи: классы, конструкторы и т. д. Есть ли инструментили метод для «упрощения» этого до того, что все еще является «источником», но с использованием только простых переменных и т. д.

Например, если у меня был экземпляр класса «myclass», который инициализировал this.blah в конструкторе,То же самое можно сделать с переменной myclass_blah, которая затем будет обрабатываться более «плоско».Я понимаю, что некоторые вещи, такие как полиморфизм, вероятно, были бы невозможны в такой ситуации.Возможно, обфускатор, настроенный на «сверхмягкую» настройку, достиг бы этого?

Спасибо

Ответы [ 3 ]

6 голосов
/ 10 января 2012

Мой опыт работы с изящными расширяемыми платформами показал, что большинство магазинов имеют свои собственные изящные расширяемые структуры (обычно более одной) и вряд ли украдут их из предоставленного поставщиком исходного кода.Если вы обязаны предоставить исходный код (из-за каких-то деловых отношений), то, по крайней мере, на мой взгляд, существует этическое обязательство предоставлять действительный исходный код в поддерживаемой форме.То, как вы защищаете исходный код, является юридическим вопросом, и я не могу предложить юридическую консультацию, но на самом деле вы должны включить в свой выпуск некоторую лицензию и иметь дело с клиентами, которые не собираются напрямую украсть ваш IP (если он на самом деле вашусловия вы разрабатываете его.)

3 голосов
/ 10 января 2012

Как уже было сказано, если это требование, основанное на ограничениях контрактов, не делайте этого.Короче говоря, предоставление версии источника, которая отличается от того, что они фактически используют, становится ответственностью, и я сомневаюсь, что именно эта компания должна быть готова принять ее.Доказать, что предоставленный код соответствует коду, который они выполняют, очень просто.Это также верно, если вы пытаетесь избежать лицензионных ограничений библиотек, которые использует ваше приложение (например, GPL).

Если это не так, то почему бы не предоставить ограниченную версию вашей платформы расширяемости, которая работает толькос внутренними типами и статически компилировать любые необходимые расширения в вашем приложении?Это позволит приложению продолжать функционировать так, как оно выполняется в настоящее время, и в то же время оставаться обслуживаемым, не отказываясь от своей священной структуры.Я никогда не делал это сам, но, похоже, что-то, с чем ILMerge мог бы помочь.

1 голос
/ 10 января 2012

Если вы не хотите выдавать рамки - просто не надо.Предоставьте только тот источник, который считаете нужным.В противном случае, скорее всего, вам потребуется либо поддерживать обе версии в будущем, либо никогда больше не работать / не взаимодействовать с этими людьми (и людьми, которых они знают).

Не забывайте, что у не скрытых сборок .Net есть ILв легко декомпилируемой форме.Часто проще использовать ILSpy / Reflector для чтения чужого кода, чем для просмотра источников.

Если причиной предоставления кода является своего рода проверка (даже просто просмотр кода), лучше иметьприличный код.Я бы серьезно подумал об отбрасывании инструмента, если его код выглядит написанным в стиле FORTRAN с использованием C # (http://www.nikhef.nl/~templon/fortran/fortran_style).

Примечание: я считаю, что «изящные расширяемые фреймворки» являются одним из корней «не придуманный здесь «синдром» - я бы больше беспокоился о комментариях к фреймворку (например, «этот код является @ # @ # @, потому что он не использует шаблон YYY, а интервал неверен»), чем повторное использование.

...