xbuild无法使用(.html)资源文件

我在让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”

主教

我不知道为什么会这样(我的大脑再也无法容纳构建系统的配置细微差别了),但是我一直沿用的技巧之一是:

MONO_IOMAP=case xbuild ...

该环境变量告诉Mono搜索文件时不区分大小写。单文档使用此为跨Windows解决大小写移植< - >的Mac < - > Linux文件系统,但该MONO_IOMAP工具提供其他几个文件系统和I / O映射操作。

如果不起作用,可以尝试使用ciopfs,这是Linux用户空间不区分大小写的文件系统。不过,我从未使用过它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

xbuild无法使用(.html)资源文件

来自分类Dev

资源文件无法被智能识别

来自分类Dev

无法从jar加载资源文件

来自分类Dev

无法访问的内部资源文件?

来自分类Dev

资源文件无法播放的PlaySound()

来自分类Dev

无法从jar加载资源文件

来自分类Dev

在NDK中使用资源文件

来自分类Dev

在资源文件中使用宏

来自分类Dev

使用Bazel生成QT资源文件

来自分类Dev

使用变量查找资源文件

来自分类Dev

如何将SonarQube规则描述指定为markdown / html资源文件,而不使用注释?

来自分类Dev

VisualStudio:是否应该对资源文件使用单独的资源文件项目?

来自分类Dev

使用Maven部署jar文件和外部资源文件

来自分类Dev

使用 zip 文件作为资源文件中的主题

来自分类Dev

struts2无法加载资源文件

来自分类Dev

无法访问Java中的资源文件夹

来自分类Dev

无法重新编译android资源文件

来自分类Dev

流星在构建时无法读取整个资源文件

来自分类Dev

Blazor WebAssembly无法从类库加载资源文件

来自分类Dev

无法在Arquillian测试中打开资源文件

来自分类Dev

无法重新编译android资源文件

来自分类Dev

无法在共享项目中加载资源文件

来自分类Dev

在MFC项目中使用多个资源文件

来自分类Dev

资源文件未使用Xcode 5更新

来自分类Dev

在按钮OnClientClick上使用资源文件

来自分类Dev

使用vbscript增加资源文件中的所有值

来自分类Dev

如何使用DexGuard混淆XML资源文件?

来自分类Dev

创建资源文件以在Qt Designer中使用它

来自分类Dev

使用位于项目根目录的maven复制资源文件