2014-10-01 2 views
3

У меня есть проект C#, который ссылается на одностороннюю сборку. Когда я пытаюсь обновить одностороннюю сборку, версия тега остается такой же * .csproj файл, даже если выгрузить/перезагружать проект:Проект C#: как обновить ссылочную версию сборки

<Reference Include="<myAssembly>, Version=<oldVersion>, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL"> 
     <SpecificVersion>False</SpecificVersion> 
     <HintPath><myHintPath></HintPath> 
</Reference> 

Так что мой проект пытается ссылаться на старую версию сборки, и что причины исключение. Это так больно менять все эти версии в ссылках вручную, особенно если есть много ссылок.

Я попытался изменить некоторые атрибут ссылки, как SpecificVersion, чтобы True и обратно False, и ссылка обновляется:

<Reference Include="<myAssembly>, Version=<newVersion>, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL"> 
     <SpecificVersion>False</SpecificVersion> 
     <HintPath><myHintPath></HintPath> 
</Reference> 

Любые идеи, как автоматически обновлять ссылки, если я обновлю сборку? Обратите внимание, что, когда я ссылаться на любой узел системы, как System.Configuration.Install, ссылка очень просто:

<Reference Include="System.Configuration.Install" /> 

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

Так как правильно обновлять ссылки?

+0

пару идей из [мс] (http://msdn.microsoft.com/en-us/library/51ket42z (v = против 0,110) .aspx). 1) Посмотрите, находится ли старая dll в GAC. Если да, удалите его 2) Посмотрите, есть ли версия dll в app.config, если это так, измените ее. –

+0

Связано: [Как точно свойство свойства «Специфическая версия» справки по сборке работает в Visual Studio?] (Http://stackoverflow.com/q/24022134/2157640) – Palec

ответ

5

Если вы всегда хотите получить последнюю версию сборки из указанного пути, просто избегайте атрибута версии в файле csproj или установите SpecificVersion в False. SpecificVersion - необязательный атрибут, указывающий, следует ли выполнять полное сопоставление имен (включая версию, культуру и PublicKeyToken).

<Reference Include="assemblyNameOnly"> 
    <HintPath>pathToDll</HintPath> 
</Reference> 

Но это не рекомендуется, так как новая версия сборки может вызвать ошибки компиляции, например. изменяется сигнатура метода. Вместо этого лучше использовать сильные именованные сборки и redirect assembly versions с использованием файлов конфигурации.

<Reference Include="assemblyName, Version=Version, Culture=neutral, PublicKeyToken=keyToken, processorArchitecture=MSIL"> 
    <SpecificVersion>True</SpecificVersion> 
    <HintPath>pathToDll</HintPath> 
</Reference> 

Тогда время выполнения будет найти новые узлы, используя алгоритм, описанный here

+0

Итак, если лучше использовать вариант по умолчанию, как автоматически обновлять ссылки через Visual Studio? Или делать нечего, но добавлять/удалять ссылки? –

+0

Если новая версия dll, которую вы хотите использовать, содержит файл политики издателя и зарегистрирован в GAC, то перенаправление на новую сборку будет выполнено автоматически. Файл политики издателя предоставляется поставщиком dll и определяет перенаправление с предыдущей версии на новую. Если у вас нет файла политики издателя, вы можете установить перенаправление сборки в конфигурацию приложения или файл конфигурации машины вручную. Посмотрите на следующие ссылки: http://www.c-sharpcorner.com/uploadfile/satisharveti/introduction-to-publisher-policy-file/ и http://msdn.microsoft.com/en-us/library/7wd6ex19(v = vs.110) .aspx – rsemenov

Смежные вопросы