Вы также можете использовать ForMember (), который имеет дополнительное преимущество, заключающееся в прохождении стандартного модульного теста Mapper.AssertConfigurationIsValid (), когда свойства, для которых заданы значения, отсутствуют в исходном объекте.
вот пример
Mapper.CreateMap<ClientData, GenerateClientLetterCommand>()
.ForMember(x => x.Id, opt => opt.MapFrom( o => Guid.NewGuid()))
.ForMember(x => x.Created, opt => opt.MapFrom( o => DateTime.Now));
Используйте freopen для перенаправления на dev / null:
freopen("/dev/null", "w", stderr);
freopen ()
ing stderr
уже упоминалось, что касается вашего конкретного вопроса. Но поскольку вы работаете с libxml2, вам может потребоваться более детальный контроль сообщений об ошибках, а не просто перенаправление всех сообщений stderr категорически. Вы знаете, что сообщения об ошибках появляются не просто так. См. документацию libxml2 о том, как использовать обработчики ошибок с libxml2. Хорошей отправной точкой является xmlSetGenericErrorFunc ()
См. Страницу руководства для функции pipe (2)
. Передайте ему STDERR и дескриптор в / dev / null, и он должен работать.
freopen (3) - это C-ориентированное решение (а не C ++, как задается вопрос), и это просто удача заставляет его работать. Не указано на работу. Это работает только потому, что, когда файловый дескриптор 2 закрыт и / dev / null открыт, он получает файловый дескриптор 2. В многопоточной среде это может не работать. Вы также не можете гарантировать, что реализация freopen (3) сначала закроет данный поток перед открытием нового файла. Все это предполагает, что вы не можете предположить, что libxml2 использует stdio в стиле C.
Решение этой проблемы в POSIX - использовать open (2) и dup2 (2):
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
...
/* error checking elided for brevity */
int fd = ::open("/dev/null", O_WRONLY);
::dup2(fd, 2);
::close(fd);
Вы можете перенаправить stderr (в любом случае, в bash) из командной строки как таковой:
./ myProgram 2> / dev / null