Ошибка сборки при подписи с помощью ключа 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
+1 к @stukselbax за то, что я нашел правильный путь.
Я использовал '/m:1' в качестве аргумента msbuild и свойство SignPublic, равное true в файле csproj.
Это началось для меня, когда я переместил Resharper Cache в System Temp. Когда я переместил его обратно в папку "Решение", проблема исчезла, и я смог собрать заново.
Только что столкнулся с этой проблемой сегодня в Visual Studio 2022- я возился с файлом csproj и в итоге получил неправильный путь к файлу snk. Я исправил это, изменив путь к файлу, чтобы он был правильным.
Щелкните правой кнопкой мыши проект -> выгрузить (чтобы вы могли редактировать файл csproj)
Под
<PropertyGroup>
проверить<AssemblyOriginatorKeyFile>
ярлыкМой код был:
<SignAssembly>true</SignAssembly> <AssemblyOriginatorKeyFile>../NAMEHERE.snk</AssemblyOriginatorKeyFile>
NAMEHERE было специфичным для моего проекта, ваше может отличаться. Посмотрите на свой файл snk. ../ спереди будет отличаться, проверьте путь к файлу вашего snk. Если вы вызвали эту ошибку, поработав с файлом csproj, как это сделал я, то правильным ответом будет то, каким был путь к файлу до того, как вы его изменили. :)Щелкните правой кнопкой мыши проект -> перезагрузить
дважды щелкните свой проект и установите значение false:
<SignAssembly>false</SignAssembly>
<PublicSign>false</PublicSign>
удалите эту строку:
<AssemblyOriginatorKeyFile>CompanyName.snkk</AssemblyOriginatorKeyFile>