1

我在 VS2008 中有一个类库 vb.net 项目,针对框架 v3.5。它用于构建精细的 Release|x64 和 Release|x86。我已将此项目转换为 VS2012,仍然针对框架 v3.5。它在 VS IDE 中构建良好。但是当我使用 MSBuild 时,它告诉我它不能添加引用,Microsoft.VisualBasic因为它已经存在:"Project already has a reference to assembly Microsoft.VisualBasic. A second reference to 'C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Microsoft.VisualBasic.dll' cannot be added."

C:\Windows\Microsoft.NET\Framework\v2.0.50727\Microsoft.VisualBasic.dll如果您打开项目属性 - 引用,则引用在项目中。

注意 - 它告诉我存在Framework64参考,但是当我打开项目时,我看到了Framework参考。

我的下一步是删除此引用。我这样做。然后我尝试再次添加它。我再次收到此消息:“无法添加对 Microsoft.VisualBasic 的引用。此组件已被构建系统自动引用”

如果我尝试在没有“显式”引用的情况下构建项目,则无法识别所有 VB.Net 函数。

所以,我被卡住了。如果我保持项目“原样”,我将无法使用 MSBuild for x64 构建它。但是,如果我删除参考,我无论如何都无法构建它。我怀疑这与有 2 个Microsoft.VisualBasic程序集的事实有关:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\Microsoft.VisualBasic.dll

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Microsoft.VisualBasic.dll

有任何想法吗?

4

2 回答 2

0

我面临着类似的问题,我删除了对 Microsoft.VisualBasic 程序集的引用以使其使用 msbuild.exe 构建,但现在它无法在 Visual Studio 中构建。

这些项目是从旧版本升级而来的,历史悠久。

我比较了一个用 Visual Studio 创建的新 VB 项目,似乎解决方案是添加这一行,该行没有使用项目升级进行:

<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
于 2014-05-01T17:50:10.370 回答
-1

最后,这是相当简单的修复。我所要做的就是从项目文件中手动删除一些 xml

<Reference Include="Microsoft.VisualBasic">
  <Name>Microsoft.VisualBasic</Name>
</Reference>

我注意到的另一件事是,在新创建的vbproj文件系统引用中列出如下

<ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
</ItemGroup>

在转换后的项目中,格式为

<Reference Include="System">
  <Name>System</Name>
</Reference>

它仍然是一个谜,为什么通过 IDE删除 Microsoft.VisualBasic 不起作用,即使 XML 从 vbproj 中消失了。为什么手动删除有效?通过 IDE 删除后,我继续比较了 vbproj 文件,它与手动删除的操作相同。

于 2013-09-11T18:33:43.233 回答