我正在为我的一个.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引擎能够以更加无缝的方式解决这个问题。任何人都可以对此有更多的了解吗?
答案 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