2013-09-10 41 views
1

我在VS2008中有一个类库vb.net项目,面向框架v3.5。它用于构建良好的发行版| x64和发行版| 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."MSBuild无法构建64位格式的VS2012 vb项目

C:\Windows\Microsoft.NET\Framework\v2.0.50727\Microsoft.VisualBasic.dll基准是项目如果打开项目属性 - 参考文献。

公告 - 它告诉我关于Framework64参考存在,但是当我打开项目,我看到框架参考。

我的下一步是删除此引用。我这样做。然后我尝试再次添加它。我又收到此消息:“不能添加到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

什么想法?

+0

我们在谈论1解决方案与更多的项目?或只有1个项目? – lordkain

+0

1个解决方案,1个项目 –

+0

和在csproj文件中,只有1个引用visualbasic.dll?它看起来如何(用记事本打开)。一个可能的解决方案是创建一个新的VS2012项目(也许转换有些问题) – lordkain

回答

-1

最后它是相当简单的修复。所有我必须做的是从项目文件中手动删除一些XML

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

我注意到另一件事是,在列举如下

<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> 

虽然转换后的项目新创建的vbproj文件系统的引用格式是

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

它仍然是个谜,为什么去除Microsoft.VisualBasic通过IDE不起作用,尽管XML从vbproj中消失了。为什么手动去除工作?我通过IDE去除了比较vbproj文件,它和手动删除功能完全一样。

+0

-1,请发表评论 –

+0

这解决了我与MS Build的问题,而使用VS编译从来不是问题。向下投票这个答案没有意义。特别是没有评论 –

0

我面临类似的问题,我删除了引用Microsoft.VisualBasic程序集,使它与MSBuild.exe生成,但现在它无法在Visual Studio中生成。

项目已从旧版本升级,历史悠久。

我比较了Visual Studio中创建一个新的VB项目,似乎解决方案是增加这行不超过使用项目进行升级:

<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> 
+0

可能,你是对的。我通过记事本删除了参考,它为我工作。自那以后这些项目一直在建设。我们使用'FinalBuilder'和'MSBuild'选项。用'VS'就可以工作。 MS Build在'proj'文件中留下了很少的错误空间。 –