从调试切换到发布时,Silverlight无法解析引用

从调试切换到发布时,Silverlight无法解析引用,silverlight,silverlight-4.0,f#,Silverlight,Silverlight 4.0,F#,我使用的是:Silverlight 4.0版,100%F#解决方案。我在将目标配置从调试切换到发布时遇到问题。在调试模式下,一切都可以很好地编译,然后在发行版中,我得到以下结果: C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1360,9): 警告MSB3245:无法解析 这个参考。找不到服务器 装配 “System.ComponentModel.DataAnnotations”。 检查以确保该程序集

我使用的是:Silverlight 4.0版,100%F#解决方案。我在将目标配置从调试切换到发布时遇到问题。在调试模式下,一切都可以很好地编译,然后在发行版中,我得到以下结果:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1360,9): 警告MSB3245:无法解析 这个参考。找不到服务器 装配 “System.ComponentModel.DataAnnotations”。 检查以确保该程序集存在 在磁盘上。如果需要此参考 通过您的代码,您可以得到编译 错误

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1360,9): 警告MSB3245:无法解析 这个参考。找不到服务器 装配 “System.Windows.Controls.Data.Input”。 检查以确保该程序集存在 在磁盘上。如果需要此参考 通过您的代码,您可以得到编译 错误

项目文件lokos中的项目组类似于:

  <ItemGroup>
    <Reference Include="FSharp.PowerPack">
      <HintPath>C:\Program Files\FSharpPowerPack-2.0.0.0\Silverlight\v3.0\FSharp.PowerPack.dll</HintPath>
    </Reference>
    <Reference Include="mscorlib" />
    <Reference Include="FSharp.Core">
      <HintPath>$(ProgramFiles)\Microsoft F#\Silverlight\Libraries\Client\$(SilverlightVersion)\FSharp.Core.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.ComponentModel.DataAnnotations" />
    <Reference Include="System.Core" />
    <Reference Include="System.Net" />
    <Reference Include="System.Runtime.Serialization" />
    <Reference Include="System.Windows" />
    <Reference Include="System.Windows.Browser" />
    <Reference Include="System.Windows.Controls">
      <HintPath>bin\Debug\System.Windows.Controls.dll</HintPath>
    </Reference>
    <Reference Include="System.Windows.Controls.Data">
      <HintPath>bin\Debug\System.Windows.Controls.Data.dll</HintPath>
    </Reference>
    <Reference Include="System.Windows.Controls.Data.Input" />
    <Reference Include="System.Windows.Controls.DataVisualization.Toolkit">
      <HintPath>bin\Debug\System.Windows.Controls.DataVisualization.Toolkit.dll</HintPath>
    </Reference>
    <Reference Include="System.Windows.Controls.Input">
      <HintPath>c:\Program Files\Microsoft SDKs\Silverlight\v4.0\Libraries\Client\System.Windows.Controls.Input.dll</HintPath>
    </Reference>
    <Reference Include="System.Windows.Controls.Layout.Toolkit">
      <HintPath>bin\Debug\System.Windows.Controls.Layout.Toolkit.dll</HintPath>
    </Reference>
    <Reference Include="System.Windows.Controls.Navigation">
      <HintPath>bin\Debug\System.Windows.Controls.Navigation.dll</HintPath>
    </Reference>
    <Reference Include="System.Windows.Controls.Toolkit">
      <HintPath>bin\Debug\System.Windows.Controls.Toolkit.dll</HintPath>
    </Reference>
    <Reference Include="System.Windows.Data">
      <HintPath>bin\Debug\System.Windows.Data.dll</HintPath>
    </Reference>
    <Reference Include="System.Xml" />
  </ItemGroup>

C:\Program Files\FSharp PowerPack-2.0.0.0\Silverlight\v3.0\FSharp.PowerPack.dll
$(程序文件)\Microsoft F\Silverlight\Libraries\Client\$(SilverlightVersion)\FSharp.Core.dll
bin\Debug\System.Windows.Controls.dll
bin\Debug\System.Windows.Controls.Data.dll
bin\Debug\System.Windows.Controls.DataVisualization.Toolkit.dll
c:\Program Files\Microsoft SDK\Silverlight\v4.0\Libraries\Client\System.Windows.Controls.Input.dll
bin\Debug\System.Windows.Controls.Layout.Toolkit.dll
bin\Debug\System.Windows.Controls.Navigation.dll
bin\Debug\System.Windows.Controls.Toolkit.dll
bin\Debug\System.Windows.Data.dll
很明显,一些元素有铰链,而其他元素没有,虽然有些元素有铰链,但似乎有绝对和相对路径

有人能帮我吗?提前谢谢


好的,所以我删除了引用,然后重新读取它们,它们以以下格式进入项目文件:

c:\Program Files\Microsoft SDK\Silverlight\v4.0\Libraries\Client\System.ComponentModel.DataAnnotations.dll

对于这两个参考。这两个版本都可以编译。关于HintPath有什么提示吗?它们是如何使用的,如何以及何时生成的?为什么当我试图手动修改proj文件时,它似乎并不重要(尽管VS告诉我它已重新加载,但仍然无法编译)


Thx

听起来像是您将项目从另一台计算机上移动,而您的计算机上没有安装和


清理解决方案,关闭Visual Studio并安装缺少的内容。

仅供参考,附带的Microsoft.FSharp.targets中存在可能与此交互的错误。您可以添加这一行

    <FrameworkRegistryBase Condition="'$(TargetFrameworkIdentifier)'=='Silverlight'">Software\Microsoft\Microsoft SDKs\$(TargetFrameworkIdentifier)</FrameworkRegistryBase>
Software\Microsoft\Microsoft SDK\$(TargetFrameworkIdentifier)
在Microsoft.FSharp.targets中的
(就在
元素下面是一个好位置)中修复它。我不知道这是否与你的问题有关(听起来可能不是),但只是提醒一下以防万一

(事实上,你得到了一个
HintPath
(即使你做得很好)也可能是F#project系统中的错误造成的。)


如果您需要解决方法,一种可能的策略是在源代码管理下的固定位置(相对于您的项目)检入需要引用的DLL副本,然后通过“固定”相对路径引用这些DLL。

还是安装在同一位置?我们在一小群开发人员中工作,我参与了他们的代码重构,并将其分发到许多较小的项目中。嗯。是的,建议所有团队成员都在同一位置正确安装所有组件。当找不到某个内容时,Visual Studio将在项目之前未清理的情况下从“调试”或“发布”文件夹链接该内容。所以事情迟早会变得一团糟……当你在一个相对较大的开发团队中时,我通常通过将核心Silverlight集合外部的库添加到源代码管理中的“LIB”文件夹来避免这个问题,并且我确保项目中的所有引用都指向这些程序集,而不是已安装的程序集。这样,我甚至可以有几个项目使用不同版本的库,无论我在我的计算机中安装了什么版本,或者即使我没有安装。关于HintPath,请看这个问题:Brian-你知道计划如何修复(错误发布修复)项目系统中的这些错误吗?Thx由于F#项目系统是VS2010的一个集成部分,因此修复最终将与VS位一起提供(例如,在未来的service pack或VS的未来版本中)。