Классы и ресурсы только для отладки в visual studio - возможно ли это? - PullRequest
3 голосов
/ 19 января 2010

Можно ли добавить класс в проект в Visual Studio и создать этот класс только для конфигурации проекта Debug? То есть он вообще не будет отображаться в сборке выпуска.

Если это возможно, возможно ли сделать то же самое для ресурсов?

Я специально думаю о тестовых классах, которые запускаются только в конфигурации Debug, но удалены из сборки для выпуска.

Ответы [ 4 ]

6 голосов
/ 19 января 2010

Вы можете использовать #DEBUG (см. ответ Джона ) для классов.

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

Файл .csproj представляет собой сценарий XML MSBuild, если вы откроете его в текстовом редакторе, вы должны найти его во всех частях вашего проекта. Если вы можете найти части, которые вы хотите исключить из определенных сборок, вы можете пометить их свойством Condition. Например, чтобы создать ItemGroup только для конфигурации Debug, вы должны сделать следующее:

<ItemGroup Condition=" '$(Configuration)' == 'Debug' " ...

Вы должны иметь возможность взглянуть на это и найти ресурсы, которые вы хотите исключить, и добавить аналогичное свойство Condition для них или для их родительской группы.

Однако я бы порекомендовал вам использовать отдельную сборку для тестирования и не допускать, чтобы она смешивалась с вашими основными сборками.

3 голосов
/ 19 января 2010

Что касается ресурсов, вам действительно нужно вручную изменить * .csproj, изменив

<EmbeddedResource Include="Components\AdmittanceChart.resx">
  <DependentUpon>AdmittanceChart.cs</DependentUpon>
  <SubType>Designer</SubType>
</EmbeddedResource>

до

<EmbeddedResource Condition=" '$(Configuration)|$(Platform)' == 'Debug' " Include="Components\AdmittanceChart.resx">
  <DependentUpon>AdmittanceChart.cs</DependentUpon>
  <SubType>Designer</SubType>
</EmbeddedResource>

но, как предположил Джон, это не обязательно хорошая практика.

3 голосов
/ 19 января 2010

Классы просты:

#if DEBUG
// Put your class here
#endif

Не уверен насчет ресурсов, хотя ... Я подозреваю, что это возможно, редактируя файл проекта вручную, но не в Visual Studio.

Я бы не сталне делайте этого для целей тестирования - я бы посоветовал вам использовать отдельную сборку для тестов.Помимо всего прочего, это означает, что вы можете протестировать то, что вы отправляете, протестировав его на основе сборки релиза.Если вам нужен доступ к внутренним типам / элементам, вы всегда можете использовать [InternalsVisibleTo] для предоставления внутреннего доступа из вашей производственной сборки в тестовую сборку.Действительно, я подозреваю, что это наиболее распространенное использование атрибута:)

1 голос
/ 19 января 2010

Вы также можете использовать Условный атрибут . В этой статье описывается условная компиляция

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...