Проект библиотеки GACed .net успешно собран только со второй попытки - PullRequest
1 голос
/ 27 сентября 2010

Я пытаюсь создать библиотеку проекта, которая должна быть в GAC, поэтому я добавил следующую строку в качестве события после сборки:

"C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ gacutil.exe" -if "$ (TargetPath)"

Для каждого выполнения четной (второй сборки, четвертой сборки и т. Д.) Сборки я получаю:

------ Build started: Project: Test.BusinessLogic, Configuration: Debug Any CPU ------   
Test.BusinessLogic -> C:\Users\Eran\Documents\Test\Trunk\Test.BusinessLogic\bin\Debug\Test.BusinessLogic.dll 
Microsoft (R) .NET Global Assembly Cache Utility.  Version 3.5.30729.1   
Copyright (c) Microsoft Corporation.  All rights reserved.

     Assembly successfully added to the cache

========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========

Что хорошо - сборка прошла успешно.

Но для каждой нечетной (первой сборки, третьей сборки и т. Д.) Сборки я получаю следующее:

------ Build started: Project: Test.BusinessLogic, Configuration: Debug Any CPU ------   
Test.BusinessLogic -> C:\Users\Eran\Documents\Test\Trunk\Test.BusinessLogic\bin\Debug\Test.BusinessLogic.dll 
Microsoft (R) .NET Global Assembly Cache Utility.  Version 3.5.30729.1   
Copyright (c) Microsoft Corporation.  All rights reserved.

     Failure adding assembly to the cache:   Cannot create a file when that file already exists.    

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(3717,9): error MSB3073: The command ""C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\gacutil.exe" -if "C:\Users\Eran\Documents\Test\Trunk\Test.BusinessLogic\bin\Debug\Test.BusinessLogic.dll"" exited with code 1.
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========

Что плохо и очень странно.

Как я могу решить эту проблему?

Ответы [ 2 ]

1 голос
/ 08 марта 2011

У вас есть ссылка на эту сборку?

Microsoft предупреждает об использовании этого инструмента при наличии активных ссылок.

/uf <assembly_name>

Forces uninstall of an assembly by removing all traced references.
<assembly_name> is the full name of the assembly to remove.
Assembly will be removed unless referenced by Windows Installer.

!! Предупреждение: используйте команду /uf осторожно, так как приложения могут не работать !!

Лучше работать с этим инструментом вне визуальной студии, например, Запустите его до начала компиляции и после сборки.

(в отдельном скрипте для VSD2010):

gacutil /uf <assemblyname>

построить свою сборку БЕЗ действий до или после сборки, которые вызывают gacutil

(в отдельном скрипте для VSD2010):

gacutil /if <assemblyname>
0 голосов
/ 04 октября 2010

Я нашел временное решение, позволяющее убедиться, что регистрация работала - используя этот скрипт для события после сборки:

:start 
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\gacutil.exe" -if "$(TargetPath)"
IF ERRORLEVEL 1 GOTO start
...