MSBuild无法找到PresentationCore的元数据文件

时间:2014-01-06 10:54:39

标签: msbuild

我正在为我的一个.NET项目编写一个MSBuild文件。出于某些原因,我不想使用Visual Studio生成的.sln和.csproj文件。我的目标也是获得编写自己的构建文件的经验。

我的一个源文件引用了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>

仅出现以下错误 - 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引擎能够以更加无缝的方式解决这个问题。任何人都可以对此有更多的了解吗?

1 个答案:

答案 0 :(得分:2)

对于x86,请确保使用正确的MSBuild:

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

而不是位于以下位置的x64 MSBuild:

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