4

我在 x64 机器上使用 Visual Studio 2010 和 TFS 2010。

我正在尝试在我的构建中使用 MSBuild 社区任务目标。此目标存在于源代码管理中。因此,在我的 csproj 文件中,我正在导入该特定目标,但现在出现以下错误:

错误 MSB4062:无法从程序集 C:\Program Files (x86)\MSBuild\MSBuildCommunityTasks\MSB uild.Community.Tasks.dll 加载“MSBuild.Community.Tasks.Attrib”任务。无法加载文件或程序集 'file:///C:\Program Files (x86)\MSBuild\MSBuildCommunityTasks\MSBuild.Community.Tasks.dll' 或其依赖项之一。该系统找不到指定的文件。确认声明正确,程序集及其所有依赖项都可用,并且任务包含实现 Micros oft.Build.Framework.ITask 的公共类。[C:\SampleTest\SampleTest.csproj]

这是我的代码:

   <Import Project="..\..\Builds\Common\MSBuildTasks\MSBuild.Community.Tasks\MSBuild.Community.Tasks.Targets" />
   <Target Name="BeforeBuild">
    <PropertyGroup>
      <MyService>ServiceName</MyService>
    </PropertyGroup>
    <ServiceController ServiceName="$(MyService)" Action="Stop" />-->
  </Target>

对上述有什么想法吗?

当我在项目文件中指定 dll 时,为什么 MSBuild 会尝试在其他地方查找 dll?

提前致谢,

4

1 回答 1

5

我认为问题出在MSBuild.Community.Tasks.Targets文件中——实际上是这个文件引用了MSBuild.Community.Tasks.dll程序集。

如果打开文件,您会看到一堆UsingTask元素,例如:

<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Attrib" />

$(MSBuildCommunityTasksLib)属性在文件顶部定义为:

<PropertyGroup>
    <MSBuildCommunityTasksPath Condition="'$(MSBuildCommunityTasksPath)' == ''">$(MSBuildExtensionsPath)\MSBuildCommunityTasks</MSBuildCommunityTasksPath>
    <MSBuildCommunityTasksLib>$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.dll</MSBuildCommunityTasksLib>
</PropertyGroup>

所以看起来你需要$(MSBuildCommunityTasksPath)在调用之前设置属性<Import>

于 2013-03-01T09:52:44.343 回答