Ошибка сборки при подписи с помощью ключа snk

Ошибка сборки происходит с момента использования Visual Studio 2015. При сборке в Visual Studio 2015 это происходит редко. При сборке в TeamCity это происходит очень часто.

[Ошибка в Visual Studio 2015]

  • Ошибка извлечения открытого ключа из файла "CompanyName.snk": процесс не может получить доступ к файлу "C:\Users\ имя_пользователя \AppData\Local\Temp\tmp2FF6.tmp", так как он используется другим процессом. CompanyName.Project.DAL D: \ Projecten \ CompanyName \ Repository \ Source \ Components \ CompanyName.Project.DAL \ vbc

[Ошибка в TeamCity]

  • Ошибка CSC CS7027: Ошибка подписания выходных данных с открытым ключом из файла "CompanyName.snk". Процесс не может получить доступ к файлу "C:\BuildAgents\Gamma\temp\buildTmp\tmpD91D.tmp", поскольку он используется другим процессом.

8 ответов

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

Файлы.snk предназначены для подписания проекта. Возможно, вам придется сделать новый.

  • Щелкните правой кнопкой мыши по вашему проекту, выберите свойства.
  • Нажмите на Подписание.
  • Установите флажок "Подписать сборку".
  • В раскрывающемся меню "Выберите файл ключа строгого имени" нажмите "Новый".
  • Заполните диалоговое окно, если хотите, особенно отметив имя файла ключа. Когда вы нажмете ОК, это создаст новый файл.snk.
  • Сохраните проект и восстановите.
  • Это будет использовать новый.snk в вашем проекте и устранит ошибку.

Надеюсь это поможет.

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

Некоторые инструменты используют GetTempFileName, и они будут получать ошибки, когда у temp много файлов

Метод GetTempFileName вызовет IOException, если он используется для создания более 65535 файлов без удаления предыдущих временных файлов.

Вероятно, это пример этой проблемы с компилятором Roslyn. Обходной путь будет добавление

<UseSharedCompilation>False</UseSharedCompilation>

под любым <PropertyGroup> узел в файле.csproj.

У меня просто была такая же проблема. В Visual Studio 2015 я исправил это, выполнив следующие действия:

  1. Перейдите в Инструменты> Параметры
  2. В диалоговом окне "Параметры" выберите "Проекты и решения> Построить и запустить"
  3. Установите "максимальное количество параллельных сборок проекта" на 1

+1 к @stukselbax за то, что я нашел правильный путь.

Я использовал '/m:1' в качестве аргумента msbuild и свойство SignPublic, равное true в файле csproj.

Это началось для меня, когда я переместил Resharper Cache в System Temp. Когда я переместил его обратно в папку "Решение", проблема исчезла, и я смог собрать заново.

Только что столкнулся с этой проблемой сегодня в Visual Studio 2022- я возился с файлом csproj и в итоге получил неправильный путь к файлу snk. Я исправил это, изменив путь к файлу, чтобы он был правильным.

  1. Щелкните правой кнопкой мыши проект -> выгрузить (чтобы вы могли редактировать файл csproj)

  2. Под<PropertyGroup>проверить<AssemblyOriginatorKeyFile>ярлык

  3. Мой код был:<SignAssembly>true</SignAssembly> <AssemblyOriginatorKeyFile>../NAMEHERE.snk</AssemblyOriginatorKeyFile>NAMEHERE было специфичным для моего проекта, ваше может отличаться. Посмотрите на свой файл snk. ../ спереди будет отличаться, проверьте путь к файлу вашего snk. Если вы вызвали эту ошибку, поработав с файлом csproj, как это сделал я, то правильным ответом будет то, каким был путь к файлу до того, как вы его изменили. :)

  4. Щелкните правой кнопкой мыши проект -> перезагрузить

дважды щелкните свой проект и установите значение false:

        <SignAssembly>false</SignAssembly> 
 <PublicSign>false</PublicSign>

удалите эту строку:

       <AssemblyOriginatorKeyFile>CompanyName.snkk</AssemblyOriginatorKeyFile>
Другие вопросы по тегам