标签: msbuild-task

MsBuild没有查找自定义任务的第二级依赖项的良好目录

我写了一个MsBuild任务:MyTask.在我的解决方案中,我有Task项目和其他项目.MyTask引用了一个引用第三个程序集的项目(比如ProjA),比如说(dep1和dep2).

这些项目都构建良好,我将输出放在一个目录(Compil)中.在这个目录中我有我想要的所有dll:MyTask.dll,ProjA.dll,dep1.dll,dep2.dll等.

在我的MsBuild文件中,我包含自定义任务程序集:

<UsingTask AssemblyFile="..\Compil\MyTask.dll" TaskName="CreateSitesCss" />
Run Code Online (Sandbox Code Playgroud)

然后我调用MyTask程序集的任务.该调用执行得很好但是MsBuild抱怨没有找到dep1和dep2程序集(尽管它们位于同一目录中):

错误:无法加载文件或程序集'dep1,Version = 2.0.0.0,Culture = neutral,PublicKey Token = 9109c11469ae1bc7'或其依赖项之一.该系统找不到指定的文件.

我可以通过将dep1.dll和dep2.dll复制到c:\ windows\microsoft .net\framework\v4.0 \来解决这个问题,但我不想这样做,因为它在构建其他项目时会触发问题(赢了' t将dep1.dll和dep2.dll复制到输出目录...).

有没有人有同样的问题,或更好的解决方案?


编辑

这是Fusion Log Viewer的输出

*** Assembly Binder Log Entry  (19/10/2010 @ 17:52:45) ***

The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.

Assembly manager loaded from:  C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable  c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = HEADOFFICE\bbaumann
LOG: DisplayName = ProjA
 (Partial)
WRN: …
Run Code Online (Sandbox Code Playgroud)

msbuild dependencies msbuild-task assembly-resolution probing

6
推荐指数
1
解决办法
1564
查看次数

在签署EXE时,"文件具有与清单中指定的计算哈希值不同"错误

我的ClickOnce安装失败并显示错误:

File,WindowsFormsProject.exe具有与manifest中指定的不同的计算哈希值.

我使用MSBuild生成ClickOnce部署包.构建脚本中的相关行:

<MSBuild Targets="Publish"
         Projects="WindowsFormsProject.csproj"
         ContinueOnError="false" />
Run Code Online (Sandbox Code Playgroud)

WindowsFormsProject.csproj具有签署可执行文件的Post-Build步骤,如下所示:

signtool sign /a $(ProjectDir)\obj\$(PlatformName)\$(ConfigurationName)\$(TargetFileName)
Run Code Online (Sandbox Code Playgroud)

麻烦的是,当我查看构建日志时,我发现清单是在Post-Build事件执行之前生成的.因此哈希码不匹配就不足为奇了.构建日志中的相关行:

_CopyManifestFiles:

WindowsFormsProject - > ...\WindowsFormsProject.application

...

PostBuildEvent:

成功签名:...\WindowsFormsProject.exe

所以,问题是:

  1. 有没有办法在<MSBuild>任务期间生成清单之前签署程序集?
  2. 有没有办法在构建完成后重新生成清单(和仅清单),以便哈希代码再次匹配?

或者,如果你能想到问题的不同解决方案,我会很感激你的想法.

c# msbuild clickonce msbuild-task

6
推荐指数
1
解决办法
7339
查看次数

如何在 MSBuild 目标中重新运行属性评估?

我有一个自定义的 MSBuild 目标,部分代码片段如下..

<Target Name="PublishHtm">
  <PropertyGroup>
    <PublishHtmTemplateContents>$([System.IO.File]::ReadAllText($(PublishHtmTemplatePath)))</PublishHtmTemplateContents>
    <PublishHtm>$(PublishHtmTemplateContents)</PublishHtm>
  </PropertyGroup>
  <WriteLinesToFile Lines="$(PublishHtm)" File="$(PublishDir)\publish.htm" Overwrite="true"/>
</Target>
Run Code Online (Sandbox Code Playgroud)

这是对此解决方案的一次返工尝试,因为我试图将此模板隔离到外部文件。该模板包含 MSBuild 属性引用,例如$(ApplicationName). 当完全按照链接解决方案中的描述执行此操作时,它工作得很好,但是当将模板作为字符串加载时,这些属性表达式在到达文件时都不会被评估。

<SPAN CLASS="BannerTextApplication">$(ApplicationName)</SPAN>
Run Code Online (Sandbox Code Playgroud)

是否有一个 MSBuild 表达式/函数可以用来在给定调用目标的上下文的情况下重新评估字符串?

顺便说一句,我不想​​使用查找/替换或正则表达式替换来解决问题,而是坚持使用 MSBuild 表达式引擎。

使用 Visual Studio 2012 和 .NET Framework 4.5。

msbuild msbuild-task msbuild-4.0

6
推荐指数
1
解决办法
2966
查看次数

MSBuild WriteCodeFragment 任务

我不清楚 WriteCodeFragment 任务的目的是什么(https://msdn.microsoft.com/en-us/library/microsoft.build.tasks.writecodefragment.aspx)。谷歌似乎只是打开文档,我看到的一个例子并不是确定的。

有人可以澄清吗?谢谢。

msbuild msbuild-task visual-studio visual-studio-2015

6
推荐指数
1
解决办法
1848
查看次数

为 .Net Core 2.0 项目结果启用代码分析 CA0055 和 CA0052 错误

目前,在使用为我们的项目定义的自定义代码分析规则集配置 ASP.Net Core 2.0 应用程序后,我收到 CA0055 和 CA0052 代码分析错误(使用 Visual Studio 2017 和使用 MSBuild 命令)。通过提供的不同解决方案尝试了不同的方法来解决这些错误,但没有运气。请帮助我们解决这些代码分析错误...

以下是错误详情

MSBUILD:错误:CA0055:无法识别“D:\Source\Temp\WebClient\Business\bin\Debug\netco reapp2.0\Business.dll”的平台。[D:\Source\Temp\WebClient\Business\Business.csproj] MSBUILD:错误:CA0052:未选择任何目标。[D:\Source\Temp\WebClient\Business\Business.csproj] 代码分析完成 -- 2 个错误,0 个警告

谢谢,维努马达夫。

code-analysis msbuild-task asp.net-core asp.net-core-2.0

6
推荐指数
1
解决办法
4288
查看次数

.NET MSBuild 目标 AfterTargets=使用 dotnet 构建进行打包

更新:

\n\n

似乎添加dotnet build -v d又名将详细程度设置为详细显示了有关此过程的更多细节(显然)

\n\n

原来的:

\n\n

参考: https: //learn.microsoft.com/en-us/nuget/reference/msbuild-targets

\n\n

我正在使用dotnet build,我的 csproj 看起来像:

\n\n
<Project Sdk="Microsoft.NET.Sdk">\n\n  <PropertyGroup>\n    <TargetFramework>netstandard2.0</TargetFramework>\n    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>\n    <PackageOutputPath>..\\packages\\</PackageOutputPath>\n    <AssemblyVersion>0.1.0</AssemblyVersion>    \n  </PropertyGroup>\n\n  <Target Name="CopyPackage" AfterTargets="Pack">\n      <Copy\n        SourceFiles="$(OutputPath)..\\$(PackageId).$(PackageVersion).nupkg"\n        DestinationFolder="%USERPROFILE%\\.nuget\\packages"\n      />\n  </Target>\n  <Target Name="AfterPackMessage" AfterTargets="Pack">\n    <Message Text="Copied $(OutputPath)..\\$(PackageId).$(PackageVersion).nupkg TO %USERPROFILE%\\.nuget\\packages" />  \n  </Target>\n</Project>\n
Run Code Online (Sandbox Code Playgroud)\n\n

我只看到这个输出

\n\n
C:\\code\\MySolution.net\\MyProject.Core (feature-mediator-http)\n\xce\xbb dotnet build\nMicrosoft (R) Build Engine version 15.8.169+g1ccb72aefa for .NET Core\nCopyright (C) Microsoft Corporation. All rights reserved.\n\n  Restore completed in 70.34 ms for C:\\code\\MySolution.net\\MyProject.Core\\MyProject.Core.csproj.\n  MyProject.Core -> …
Run Code Online (Sandbox Code Playgroud)

.net c# msbuild msbuild-task .net-core

6
推荐指数
1
解决办法
1343
查看次数

DllExportAppDomainIsolatedTask 在构建 DLL 时意外失败

我正在尝试在 Visual Studio 中用 C# 构建 Dll。使用 NuGet RGiesecke.DllExport。然而,由于某种原因,它在构建 Dll 时返回一些错误。下面是描述。

错误
“DllExportAppDomainIsolatedTask”任务意外失败。System.ArgumentException:找不到请求的值“Version46”。

服务器堆栈跟踪:

   at System.Enum.EnumResult.SetFailure(ParseFailureKind failure, String failureMessageID, Object failureMessageFormatArgument)
   at System.Enum.TryParseEnum(Type enumType, String value, Boolean ignoreCase, EnumResult& parseResult)
   at System.Enum.Parse(Type enumType, String value, Boolean ignoreCase)
   at RGiesecke.DllExport.MSBuild.ExportTaskImplementation`1.<>c__DisplayClass8.<GetGetToolPathInternal>b__7(Version version, String toolName) in c:\Users\rober_000\Documents\Code\unmanaged-exports\RGiesecke.DllExport.MSBuild\ExportTaskImplementation.cs:line 568
   at RGiesecke.DllExport.MSBuild.ExportTaskImplementation`1.TryToGetToolDirForFxVersion(String toolFileName, Func`3 getToolPath, String& toolDirectory) in c:\Users\rober_000\Documents\Code\unmanaged-exports\RGiesecke.DllExport.MSBuild\ExportTaskImplementation.cs:line 725
   at RGiesecke.DllExport.MSBuild.ExportTaskImplementation`1.ValidateToolPath(String toolFileName, String currentValue, Func`3 getToolPath, String& foundPath) in c:\Users\rober_000\Documents\Code\unmanaged-exports\RGiesecke.DllExport.MSBuild\ExportTaskImplementation.cs:line 698
   at RGiesecke.DllExport.MSBuild.ExportTaskImplementation`1.ValidateFrameworkPath() in c:\Users\rober_000\Documents\Code\unmanaged-exports\RGiesecke.DllExport.MSBuild\ExportTaskImplementation.cs:line 680
   at RGiesecke.DllExport.MSBuild.ExportTaskImplementation`1.ValidateInputValues() in c:\Users\rober_000\Documents\Code\unmanaged-exports\RGiesecke.DllExport.MSBuild\ExportTaskImplementation.cs:line 396
   at RGiesecke.DllExport.MSBuild.ExportTaskImplementation`1.Execute() in …
Run Code Online (Sandbox Code Playgroud)

c# msbuild msbuild-task visual-studio unmanagedexports

6
推荐指数
2
解决办法
6327
查看次数

Visual Studio 2019 的离线构建工具

我正在尝试从https://visualstudio.microsoft.com/downloads/下载Visual Studio 2019 的构建工具但是当我单击下载按钮时,系统会下载一个 exe,该 exe 尝试连接到 Internet 以下载软件包的其余部分。

我如何才能获得离线版本的 Visual Studio 2019构建工具Visual Studio 2017 构建工具

.net c# msbuild msbuild-task visual-studio-2017-build-tools

6
推荐指数
1
解决办法
2万
查看次数

MSBuild UsingTask和解析引用

我使用的NuGet拉进来YUICompressor.NET.MSBuild,这反过来又拉动YUICompressor.NETEcmaScript.Net.

它还添加了对我的Web项目中所有三个DLL的引用.然后,我可以像这样添加UsingTask引用:

<UsingTask TaskName="CssCompressorTask" AssemblyFile="$(SolutionDir)\packages\YUICompressor.NET.MSBuild.2.3.0.0\lib\NET20\Yahoo.Yui.Compressor.Build.MsBuild.dll" />
Run Code Online (Sandbox Code Playgroud)

然后使用该任务在AfterBuild目标中压缩我的Javascript/CSS

但是,我不想在我的web项目中引用这些DLL(因为它们实际上并不是我发布的内容的一部分)...但是当我删除引用时,CssCompressorTask再也找不到其他两个相关的DLL了(它们位于文件夹下的不同文件/packages夹中 - 如果它们在旁边则可以正常工作Yahoo.Yui.Compressor.Build.MsBuild.dll)

信不信由你,我花了好几个小时试图让依赖关系得到解决:首先我尝试修改AssemblySearchPaths以包含所有其他/ packages子文件夹,如下所示:

https://github.com/BenPhegan/NuGetAutoTransitiveDependencies

这不起作用,所以我尝试创建一个内联汇编解析器,如下所示:

MSBuild UsingTask解析引用

这也不起作用.目前,我认为我唯一的选择是将依赖的DLL与UsingTask dll一起使用,不管怎样......但这感觉就像我的MSBuild foo让我失望:/

任何想法非常感谢!谢谢.

msbuild msbuild-task yui-compressor nuget

5
推荐指数
1
解决办法
1298
查看次数

如何从多个源文件创建MSBuild内联任务

我有几个CS文件(一个DLL项目),都在一个目录中,其中一个类扩展了ITask.现在,很容易记录如何从一个源文件创建内联任务,但是可以从多个源文件中执行此操作吗?我无法编译和使用DLL作为任务,我更愿意,如果我不必将所有源都塞进一个大的源文件.

我的目标是:

<UsingTask TaskName="foo" TaskFactory="CodeTaskFactory" AssemblyFile="Microsoft.Build.Tasks.v4.0.dll">
  <Task>
    <Code Type="Class" Language="cs" Source="mydir\*.cs"/>
  </Task>
</UsingTask>
Run Code Online (Sandbox Code Playgroud)

c# msbuild msbuild-task

5
推荐指数
1
解决办法
1433
查看次数