вторник, 24 августа 2010 г.

Отображение непечатаемых символов в SQL Server Management Studio

Чтобы включить в Management Studio отображение непечатаемых символов (пробел, табуляция), нужно присвоить значение 1 следующему ключу реестра:
HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\xx\Tools\Shell\Text Editor\Visible Whitespace

Здесь xx — версия SSMS. Для 2008-ого SQL сервера имеет значение 100.

В VS, кстати, это делается комбинацией клавиш Ctrl+R, Ctrl+W.

Найдено здесь.

суббота, 21 августа 2010 г.

Visual Studio 2010: Clean command line, переменные среды

При выполнении команды Clean в C++ проекте типа Makefile project команды запускаются в некорректном окружении: cmake ругается на отсутствие необходимых переменных, nmake не доступен в PATH. Проблема известна, но предложенный workaround с ключом useenv не работает, неправильное окружение получают и команды Build и Rebuild.


Update: решение найдено. Необходимо в Clean command line добавить вызов bat-файла, устанавливающего необходимые переменные среды. Этот bat-файл используется в ярлыке Visual Studio Command Prompt (2010).

call "$(VCInstallDir)vcvarsall.bat"

set BUILD_DIR="$(ProjectDir)$(Configuration)"
set PROJECT_DIR="$(ProjectDir)..\..\.."
 
if not exist %BUILD_DIR% mkdir %BUILD_DIR%
cd %BUILD_DIR%
cmake -DCMAKE_BUILD_TYPE=$(ConfigurationName) -G "NMake Makefiles" %PROJECT_DIR%
nmake clean

Сборка log4cxx 0.10.0 в Visual Studio 2010

log4cxx версии 0.10.0, скачанный с сайта Apache, не собирается. Проблема известная и отмечена в issue tracker'е проекта. В талоне указан патч, который вносит необходимые исправления в код. В него входят некоторые лишние, на мой взгляд, файлы (log4cxx.h, log4cxx_private.h и два xml системы сборки), которые патчить не нужно. После внесения модификаций проект скомпилируется, но не слинкуется. Причина в том, что при конвертации файла проекта в новый формат были утеряны сведения о зависимостях log4cxx.dll от других библиотек.

Для конфигурации Release необходимо внести следующие изменения:

log4cxx Properties --> Configuration Properties --> Linker --> General --> Additional Library Directories


log4cxx Properties --> Configuration Properties --> Linker --> Input --> Additional Library Dependencies


Для конфигурации Debug имена директорий LibR нужно поменять на LibD.

PS: Процесс сборки описан здесь.

вторник, 17 августа 2010 г.

CMake, Visual Studio, отладка

Чтобы отлаживать проект CMake'а в студии, необходимо указать следующее в поле Command страницы Debugging свойств проекта:
$(TargetDir)$(ConfigurationName)\$(TargetName)\$(TargetFileName)

Update:Для Visual Studio 2010 путь будет другой.

$(ProjectDir)$(Configuration)\$(ProjectName)\$(ProjectName).exe

Так же имеет смысл указать Working Directory, использовав путь к исполняемому файлу. Для VS 2010:

$(ProjectDir)$(Configuration)\$(ProjectName)\

Update2: эти установки сохраняются не в файле проекта, а файле *.vcxproj.user

пятница, 13 августа 2010 г.

Исправление бага в развернутом ASP.NET приложении

Есть ASP.NET приложение, которое развернуто у заказчика. В приложении баг, развернуть новую версию быстро нельзя. Баг можно обойти, если изменить свойство наследника HttpApplication, которое задается в обработчике события Application.Start.

К счастью, у наследника оказался виртуальный метод, который можно было переопределить:
protected virtual void OnApplicationEnd(object sender, EventArgs e)
{
  Log.Debug("Application End");
}

Для этого нужно отредактировать Global.axax:
<%@ Application Codebehind="Global.asax.cs" Inherits="Triad.Server.QueryService.QueryServiceApplication" Language="C#" %>

<script runat="server">
protected override void OnApplicationStart(object sender, EventArgs e)
{
  base.OnApplicationStart(sender, e);
  // set property
}
</script>

Идея была подсказана на форуме.

вторник, 10 августа 2010 г.

CMake: интеграция с Visual Studio

Есть проект, описанный здесь, нужно интегрировать его с VS.

Структура директорий следующая:
C:\DOCUMENTS AND SETTINGS\user\DESKTOP\CMAKE_TEST
│   CMakeLists.txt
│
├───cli
│   │   CMakeLists.txt
│   │
│   └───src
│           main.cpp
│
├───core
│   │   CMakeLists.txt
│   │
│   ├───include
│   │       core.hpp
│   │
│   └───src
│           core.cpp
│           core.hpp
│
└───ide_files
    └───vs
        │   CMake_test.sln
        │
        ├───cli
        │       cli.vcproj
        │
        └───core
                core.vcproj

В студии нужно создать солюшен и добавить в него два проекта, соответствующие подпроектам CMake, подробно это описано здесь. В каждый из проектов нужно добавить соответствующие исходные файлы (правой кнопкой по проекту --> Add --> Existing Item). Но команды для сборки проекта будут другие:
set BUILD_DIR="$(TargetDir)$(ConfigurationName)"
set PROJECT_DIR="$(TargetDir)..\..\.."

if not exist %BUILD_DIR% mkdir %BUILD_DIR%
cd %BUILD_DIR%
cmake -DCMAKE_BUILD_TYPE=$(ConfigurationName) -G "NMake Makefiles" %PROJECT_DIR%
nmake all

set BUILD_DIR="$(TargetDir)$(ConfigurationName)"
set PROJECT_DIR="$(TargetDir)..\..\.."

if not exist %BUILD_DIR% mkdir %BUILD_DIR%
cd %BUILD_DIR%
cmake -DCMAKE_BUILD_TYPE=$(ConfigurationName) -G "NMake Makefiles" %PROJECT_DIR%
nmake clean all

set BUILD_DIR="$(TargetDir)$(ConfigurationName)"
set PROJECT_DIR="$(TargetDir)..\..\.."

if not exist %BUILD_DIR% mkdir %BUILD_DIR%
cd %BUILD_DIR%
cmake -DCMAKE_BUILD_TYPE=$(ConfigurationName) -G "NMake Makefiles" %PROJECT_DIR%
nmake clean

В поле Output должно быть написано core.lib для проекта core и cli.exe для проекта cli.

Исходный код здесь.

Update: Выше указаны команды сборки для проекта cli. Для проекта core необходимо изменить вторую строку:

set PROJECT_DIR="$(TargetDir)..\..\..\core"

Update1: для Visual Studio 2010 первые две и 6-ая строки должны быть другими, поскольку изменились имена встроенных переменных (пример для проекта cli):
set BUILD_DIR="$(ProjectDir)$(Configuration)"
set PROJECT_DIR="$(ProjectDir)..\..\.."
 
if not exist %BUILD_DIR% mkdir %BUILD_DIR%
cd %BUILD_DIR%
cmake -DCMAKE_BUILD_TYPE=$(Configuration) -G "NMake Makefiles" %PROJECT_DIR%
nmake all

понедельник, 9 августа 2010 г.