我正在使用 Microsoft.SQLServer.Types 来使用空间类型。我正在从 Nuget 安装 11.x 版。
当我使用 Visual Studio (2013) 发布解决方案时,它将版本 11.x 复制到 bin 文件夹。
但是,当我使用 MSBuild 进行构建时,它会将版本 10.x 复制到 bin 文件夹中。
任何想法为什么?
这是引用 dll 的 csproj 文件的一部分:
<Reference Include="Microsoft.SqlServer.Types, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.SqlServer.Types.11.0.1\lib\net20\Microsoft.SqlServer.Types.dll</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)
此外,复制本地设置为 true。
另外,我在该项目的 web.config 中有这个:
<dependentAssembly>
<assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)
tl;dr:检查所有子项目对该 dll 的引用。可能其中一个(或多个)仍在引用旧版本。
细节:
首先,web.configbindingRedirect仅在运行时相关,因此与您的发布问题无关。
和您一样(甚至 8 年后),我也目睹过 Visual Studio 发布的 dll 版本与从命令行发布时不同的情况msbuild。尽管我从未花时间证明这一点,但我怀疑 VS 发布参考文献的顺序与msbuild实际略有不同。无论它们为何不同,解决方案都是修复对该 dll 的所有子项目引用,而不仅仅是网站项目。幸运的是,有一种简单的方法可以确定哪个项目仍在引用旧的 dll。
大多数人将msbuild 的“详细”级别更改为“安静”或“最小”以防止过多的日志记录,但如果您暂时将该级别恢复到至少“正常”( -v:n),您应该会看到每个 dll 的列表被复制到临时位置。(可能类似于obj\Release\Package\PackageTmp。)通过日志搜索,您可能会看到正确的 dll 被复制到该目录中,可能会被复制多次,然后同一 dll 的旧版本最后被复制到该目录中,从而覆盖新版本。从那里向上滚动应该可以识别需要更新的项目。
| 归档时间: |
|
| 查看次数: |
879 次 |
| 最近记录: |