DevOps使用本地化资源构建

时间:2018-09-28 13:15:37

标签: msbuild localization nuget azure-devops

我正在尝试使用Azure DevOps构建解决方案,并将结果作为nuGet包发布在私有存储库中。

解决方案中的项目包含包含英语文本的本地化资源Language.resx。 本地化的版本是: Language.da.resxLanguage.se.resxLanguage.no.resx,但这些都不包含在生成的nuget程序包中。

我尝试将/target:Resource,Compile添加到DevOps中“构建解决方案”任务的MSBuild参数属性中,但这只是导致一个错误,表明未找到“资源”目标。

我确定我只是缺少明显的东西,但我看不到它。 我必须亲近,nuGet包毕竟会发布并且可以工作,除了本地化资源。

我检查了生成的nuGet软件包,并从相关项目中提取了dll。 用.Net Reflector 10打开dll会告诉我它确实确实包含英文文本字符串,但没有其他语言。

希望其他人可以帮助我:-)

1 个答案:

答案 0 :(得分:0)

看来本地化资源确实是默认构建的,尽管在.Net Reflector 10中不可见。 原因是它们没有包含在“打包”任务的nuGet包中。

一些研究使我向项目添加了.nuspec文件。 在此文件中,我指定了相关文件等,它们现在包含在nuGet软件包中。

但是不是很理想,因为文件和依赖项列表现在必须手动维护。但是我找不到使它动态化的方法。 不过,可以使用指向AssemblyInfo.cs文件的变量来使.nuspec文件中的大多数细节变为动态。

我最终在.nuspec文件中获得了以下内容(尽管某些细节已清除,因为它是公开显示的) 注意:Release部分的src属性中的单词files是我的构建配置文件的名称。您的解决方案可能使用其他名称。

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
    <metadata>
        <!-- The identifier that must be unique within the hosting gallery -->
        <id>$id$</id>

        <!-- The package version number that is used when resolving dependencies -->
        <version>$version$</version>

        <!-- Authors contain text that appears directly on the gallery -->
        <authors>$author$</authors>

        <!-- 
            Owners are typically nuget.org identities that allow gallery
            users to easily find other packages by the same owners.  
        -->
        <owners>$author$</owners>

        <!-- License and project URLs provide links for the gallery -->
        <!--<licenseUrl></licenseUrl>-->
        <!--<projectUrl></projectUrl>-->

        <!-- The icon is used in Visual Studio's package manager UI -->
        <!--<iconUrl></iconUrl>-->

        <!-- 
            If true, this value prompts the user to accept the license when
            installing the package. 
        -->
        <requireLicenseAcceptance>false</requireLicenseAcceptance>

        <!-- Any details about this particular release -->
        <!--<releaseNotes></releaseNotes>-->

        <!-- 
            The description can be used in package manager UI. Note that the
            nuget.org gallery uses information you add in the portal. 
            Must be included, and must never be empty.
        -->
        <description>$description$</description>

        <!-- Copyright information -->
        <copyright>$copyright$</copyright>

        <!-- Tags appear in the gallery and can be used for tag searches -->
        <!--<tags></tags>-->

        <!-- Dependencies are automatically installed when the package is installed -->
        <dependencies>
            <dependency id="MicrosoftOfficeCore" version="15.0.0" />
            <dependency id="Microsoft.Office.Interop.Word" version="15.0.4797.1003" />
        </dependencies>
    </metadata>

    <!-- Files to include in the package -->
    <files>
        <file src="bin\Release\$id$.dll" target="lib\net462\$id$.dll" />
        <file src="bin\Release\da\$id$.resources.dll" target="lib\net462\da\$id$.resources.dll" />
        <file src="bin\Release\no\$id$.resources.dll" target="lib\net462\no\$id$.resources.dll" />
        <file src="bin\Release\sv\$id$.resources.dll" target="lib\net462\sv\$id$.resources.dll" />
    </files>
</package>