MSBuild不能使用绝对路径DLL?

时间:2017-11-03 10:56:16

标签: c# msbuild

MSBuild告诉我它无法找到以下任务中包含的引用(这是一个内联任务):

<Task>
  <Reference Include="WindowsBase" />
  <Reference Include="$(SolutionDir)ImageTextWriter\bin\$(Configuration)\ImageTextWriter.dll" />
  ...
</Task>

我已确认此文件实际存在于指定路径中。然而,MSBuild返回

  
    

System.IO.FileNotFoundException:无法加载文件或程序集&#39; ImageTextWriter,Version = ...

  

我做错了吗?

注意:我不是MSBuild专家,但this post告诉我硬编码路径应该有用。

2 个答案:

答案 0 :(得分:1)

我想知道强大的装配命名是否是罪魁祸首。尝试替换

"apikey"
"endpoints"
"iam_apikey_description"
"iam_apikey_name"
"iam_role_crn"
"iam_serviceid_crn"
"resource_instance_id"

<Reference Include="$(SolutionDir)ImageTextWriter\bin\$(Configuration)\ImageTextWriter.dll" />

如果失败了,请重新考虑在构建中早期<Reference Include="$(SolutionDir)ImageTextWriter\bin\$(Configuration)\ImageTextWriter.dll"> <SpecificVersion>False</SpecificVersion> </Reference> 清除ImageTextWriter.dll的可能性是否有所负责(尽管您之前对详细日志输出的检查似乎排除了这一点):

  1. bin/手动复制到项目外的任意文件夹中。
  2. 暂时将ImageTextWriter.dll路径更改为该文件副本的完整硬编码路径。
  3. 三次点击你的脚跟......
  4. 修改

    我做了一些测试并发现:

      Include元素位于SpecificVersion时,不允许
    • Reference元数据。我上面的第一个想法非常多!
    • 但是,在您使用Task<Task>的上下文中,属性展开需要将<Task Evaluate="True">更改为$(SolutionDir)

      • 这是我验证行为的构造:
        $(Configuration)
      • 以下是导致我尝试它的文档(强调我的):

          

        UsingTaskBodyType包含内联任务实现。 内容对MSBuild不透明。

             

        UsingTaskBodyType_Evaluate ...在使用之前身体是否应该扩展属性。默认为false。

答案 1 :(得分:0)

你可以试试那个:

<Reference Include="ImageTextWriter">
  <HintPath>$(SolutionDir)ImageTextWriter\bin\$(Configuration)\ImageTextWriter.dll</HintPath>
</Reference>

但如果这是创建ImageTextWriter.dll的项目,我不认为这是可能的。