我在让xbuild编译Web应用程序项目时遇到问题。我们有一些资源文件,它们是.html文件。
目前失败的是 'KwasantCore\Resources\HTMLEventInvitation.html'
资源在KwasantCore.csproj中定义为
<Content Include="Resources\HTMLEventInvitation.html" />
在ubuntu上构建时,文件位于以下位置:
/home/gitlab_ci_runner/gitlab-ci-runner/tmp/builds/project-1/KwasantCore/Resources/HTMLEventInvitation.html
运行xbuild时,出现此错误:
/home/gitlab_ci_runner/gitlab-ci-runner/tmp/builds/project-1/Kwasant.sln (default targets) ->
(Build target) ->
/home/gitlab_ci_runner/gitlab-ci-runner/tmp/builds/project-1/KwasantCore/KwasantCore.csproj (default targets) ->
/usr/lib/mono/xbuild/12.0/bin/Microsoft.Common.targets (GenerateResources target) ->
/usr/lib/mono/xbuild/12.0/bin/Microsoft.Common.targets: error : Tool exited with code: 1. Output: Error: Invalid ResX input.
Position: Line 123, Column 5.
Inner exception: Could not find a part of the path "/home/gitlab_ci_runner/gitlab-ci-runner/tmp/builds/project-1/KwasantCore/resources/htmleventinvitation.html".
我检查了文件,它在那里-问题是区分大小写。在.csproj中正确引用了该资源,因此沿该行的某个位置,该资源从'Resources/HTMLEventInvitation.html'
变为小写。'resources/htmleventinvitation.html'
我已经看过了Ubuntu盒子上的Microsoft.Common.targets文件。第125行完全不相关(它向我显示</PropertyGroup>
)。查看GenerateResources目标,它向我展示了这一点:
<Target Name = "GenerateResources">
<GenerateResource
Sources = "@(ResxWithNoCulture)"
UseSourcePath = "true"
OutputResources = "@(ManifestResourceWithNoCultureName->'$(IntermediateOutputPath)%(Identity).resources')"
Condition = "'@(ResxWithNoCulture)' != '' ">
<Output TaskParameter = "OutputResources" ItemName = "ManifestResourceWithNoCulture"/>
<Output TaskParameter = "FilesWritten" ItemName = "FileWrites"/>
</GenerateResource>
<GenerateResource
Sources = "@(ResxWithCulture)"
UseSourcePath = "true"
OutputResources = "@(ManifestResourceWithCultureName->'$(IntermediateOutputPath)%(Identity).resources')"
Condition = "'@(ResxWithCulture)' != '' ">
<Output TaskParameter = "OutputResources" ItemName = "ManifestResourceWithCulture"/>
<Output TaskParameter = "FilesWritten" ItemName = "FileWrites"/>
</GenerateResource>
</Target>
引用的目标是:
<CreateItem Include="@(ResourcesWithNoCulture)" Condition="'%(Extension)' == '.resx'">
<Output TaskParameter="Include" ItemName="ResxWithNoCulture"/>
</CreateItem>
<CreateItem Include="@(ResourcesWithNoCulture)" Condition="'%(Extension)' != '.resx'">
<Output TaskParameter="Include" ItemName="NonResxWithNoCulture"/>
</CreateItem>
<CreateItem Include="@(ResourcesWithCulture)" Condition="'%(Extension)' == '.resx'">
<Output TaskParameter="Include" ItemName="ResxWithCulture"/>
</CreateItem>
<CreateItem Include="@(ResourcesWithCulture)" Condition="'%(Extension)' != '.resx'">
<Output TaskParameter="Include" ItemName="NonResxWithCulture"/>
</CreateItem>
现在,这对我来说似乎很可疑,但是我无法弄清楚这些Include="@(ResourcesWithNoCulture)"
行在做什么-在其他地方搜索它们不会给我任何提示。它是.html文件(而不是.resx)的事实,使我对GenerateTargets目标产生怀疑,因为它仅调用目标的resx版本。
我不是.targets文件的专家-有人可以帮我吗?我已经四处搜寻,但没有找到任何帮助。我认为这将是一个相当常见的错误,因为资源并不是非常稀有(但也许没有.resx的话)。
编辑:再次查看后,与'GenerateResources'相关的错误并不完全有意义:由于资源不是.resx,它应该在'CopyNonResxEmbeddedResources'失败。他们的GenerateResources目标不应接触.html文件-因为它仅查看'ResxWithNoCulture'和'ResxWithCulture'
<Target Name = "CopyNonResxEmbeddedResources"
Condition = "'@(NonResxWithCulture)' != '' or '@(NonResxWithNoCulture)' != '' or '@(ManifestNonResxWithCulture)' != '' or '@(ManifestNonResxWithNoCulture)' != ''">
<MakeDir Directories="$(IntermediateOutputPath)%(ManifestNonResxWithCulture.Culture)"/>
<Copy SourceFiles = "@(NonResxWithCulture)"
DestinationFiles = "@(ManifestNonResxWithCulture->'$(IntermediateOutputPath)%(Identity)')"
SkipUnchangedFiles="$(SkipCopyUnchangedFiles)">
<Output TaskParameter = "DestinationFiles" ItemName = "ManifestNonResxWithCultureOnDisk"/>
<Output TaskParameter = "DestinationFiles" ItemName = "FileWrites"/>
</Copy>
<Copy SourceFiles = "@(NonResxWithNoCulture)"
DestinationFiles = "@(ManifestNonResxWithNoCulture->'$(IntermediateOutputPath)%(Identity)')"
SkipUnchangedFiles="$(SkipCopyUnchangedFiles)">
<Output TaskParameter = "DestinationFiles" ItemName = "ManifestNonResxWithNoCultureOnDisk"/>
<Output TaskParameter = "DestinationFiles" ItemName = "FileWrites"/>
</Copy>
</Target>
在“ GenerateResources”之前直接调用目标“ CopyNonResxEmbeddedResources”
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句