【问题标题】:Visual Studio project reference that isn't version specific at runtime在运行时不是特定于版本的 Visual Studio 项目参考
【发布时间】:2019-01-04 21:39:48
【问题描述】:

我们有一个多项目解决方案。项目之间的引用作为项目引用而不是程序集引用(正如人们所期望的那样)完成。这适用于我们的部署,但会创建特定于版本的运行时依赖项。问题是我们想开始创建仅更新已更改的特定 dll 的热修复安装程序。更新所有 dll 不适合我们当前的客户情况。

项目引用的“特定版本”属性已禁用,除了切换到程序集引用和使用 csproj 中的选择块根据构建配置在调试/发布箱之间切换之外,我无法找到解决方法。

是否有其他替代方法允许在运行时使用任何版本?

【问题讨论】:

  • app.config 文件应该能够将调用从一个版本重定向到另一个版本。你试过吗?
  • @ChrisDunaway 说得好。我们将重定向用于其他一些事情,也可以在这里使用它。我还没有验证它是否适用于这种情况,但我认为它会。不过,我希望能够有效地免维护(例如针对程序集引用的 SpecificVersion=false 设置)
  • 所有的程序集都被强命名了吗?
  • 你关注的是错误的问题,你仍然需要一个知道用户安装的这些 DLL 的版本的魔术八球。 IDE 或 MSBuild 中没有内置任何东西来提供该 oracle,您必须自己跟踪它。也没有什么微妙的,忘记增加 [AssemblyVersion] 是一个非常基本的事故。由构建工程师推送更新的专用部署服务器是常用方法。这使您的“当前客户情况”完全是您的问题,而不是他的问题,就像它应该的那样。
  • 这有点模棱两可,应该是客户的问题。他们的 IT 人员应该推送更新,通常是在审查和测试更改之后。如果他们不想拥有这个员工,那么一定要让他们为你的员工买单:)

标签: c# .net visual-studio dll


【解决方案1】:

免维护

我们采用的方法是将程序集版本设置为固定数字,并且仅在构建时更新文件版本。(我们过去常常使两者保持同步)。我们采用了这种方法,因为它是免维护的,并且让我们通过项目保留我们的引用。

程序集版本是 .net 用来查找依赖 dll 的特定版本的。如果您通过 Windows 资源管理器查看文件的属性详细信息,则会显示文件版本。

如果您希望能够修复任何 dll,则需要将所有程序集引用更新为 versionSpecific=false,并将所有项目设置为具有固定程序集版本。如果您只想修复特定项目的 dll,那么您只需修复这些项目的程序集版本。然后,引用项目可以保留您想要的任何程序集版本方案。

程序集版本在ProjectFolder/Properties/AssemblyInfo.cs 中设置。我们现在已将我们的固定为 1.0.0.0,并且仅在构建时增加文件版本。

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.2.3.45678")]

【讨论】:

    【解决方案2】:

    需要维护

    如果您无法设置固定的程序集版本,则另一种方法是使用文件引用。这里的问题是您的项目 dll 的路径将根据您的活动构建配置(调试与发布)而有所不同。为了解决这个问题,您可以根据配置使您的参考成为有条件的。

    主要的缺点是您需要手动维护构建顺序。此外,如果您添加了一个新项目,那么您需要记住再次使用这些动态引用。

      <Choose>
        <When Condition="'$(Configuration)'=='Release'">
          <ItemGroup>
            <Reference Include="Your.AssemblyName">
              <HintPath>..\Your.AssemblyName\bin\x86\release\Your.AssemblyName.dll</HintPath>
            </Reference>
          </ItemGroup>
        </When>
        <Otherwise>
          <ItemGroup>
            <Reference Include="Your.AssemblyName">
              <HintPath>..\Your.AssemblyName\bin\x86\debug\Your.AssemblyName.dll</HintPath>
            </Reference>
          </ItemGroup>
        </Otherwise>
      </Choose>
    

    如果需要,您还可以将 Debug 保留为项目引用,这将允许您查看由于项目引用而 Visual Studio 自动生成的构建序列。然后,您就可以为您的发布配置模仿该顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-16
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 2015-08-27
      相关资源
      最近更新 更多