2014-01-06 24 views
1

我正在为我的一个.NET项目编写一个MSBuild文件。由于某些原因,我不想使用Visual Studio生成的.sln和.csproj文件。我也希望获得一些编写我自己的构建文件的经验。MSBuild无法找到PresentationCore的元数据文件

我的一个源文件的引用System.Windows.Media命名空间,并与下面的消息

error CS0234: The type or namespace name 'Media' does not exist in the namespace 'System.Windows' (are you missing an assembly reference?) 

所以我在构建文件中添加以下代码段无法构建...

<ItemGroup> 
    <Reference Include="PresentationCore"> 
     <RequiredTargetFramework>4.0</RequiredTargetFramework> 
    </Reference> 
</ItemGroup> 

我做的CSC任务如下变化...

<Target Name="ReleaseBuild"> 
     <MakeDir Directories="$(ReleaseDir)"/> 
     <Csc Sources="@(SrcFile)" 
       OutputAssembly="$(ReleaseDir)\$(OutputAssemblyName)" 
       TargetType="Library" 
       References="@(Reference); 
          $(LibDir)\MyOwnLib.DLL" 
       Platform="$(ProcessorPlatform)"> 
     </Csc> 
</Target> 

只拿到个e以下错误 - CSC : error CS0006: Metadata file 'PresentationCore' could not be found

为什么MSBuild无法在GAC中找到PresentationCore程序集?我应该提供一些额外的版本信息吗?我在很多论坛上搜索过,但似乎在圈子里,我会很高兴有什么有用的指针,问题可能是什么。

我在x64计算机上使用MSBuild 4.0并为x86目标构建。只引用MS核心库的我的构建文件工作正常。我的VS2008项目也很好。

一些进展

我能通过进行以下更改在这个问题上取得进展......

1)我添加了一个属性来指定演示文稿核心库的路径 - <PresentationCoreLibDir>C:\Windows\Microsoft.NET\assembly\GAC_32\PresentationCore\v4.0_4.0.0.0__31bf3856ad364e35</PresentationCoreLibDir>

2)增加了一个额外的参数给CSC任务这样的 - AdditionalLibPaths="$(PresentationCoreLibDir)"

3)最后附加的.DLL后缀的参考标记 - <ItemGroup> <Reference Include="PresentationCore.DLL"> <RequiredTargetFramework>4.0</RequiredTargetFramework> </Reference> </ItemGroup>

我很欣慰,我是能够解决这个问题,但有没有这样做的一个更合适的方法?我认为MSBuild引擎能够以更无缝的方式解决这个问题。任何人都可以更多地指出这一点吗?

+0

如果删除'会发生什么 4.0'? – Justin

+0

我删除它,并没有改变。它仍然抱怨同样的错误。 – bincob

回答

2

对于x86确保你使用正确的的MSBuild这应该是:

c:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe 

,而不是64位的MSBuild是位于:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe 
+0

我已经使用了位于C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319的正确x32 MSBuild,所以没关系。感谢您的提醒。 – bincob