【问题标题】:C# application not recognizing satellite resource assembliesC# 应用程序无法识别卫星资源程序集
【发布时间】:2010-07-26 21:14:05
【问题描述】:

由于我们的应用程序中有大量的 .resx 文件,我创建了以下 MSBuild 脚本来将所有语言 .resx 文件编译为 .resource,然后将它们嵌入到附属资源程序集中。

    <Project DefaultTargets="Main" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Res Include = "Dialog\*.ja-JP.resx">
      <Culture>ja-JP</Culture>
      <Project>Dialog</Project>
    </Res>
  </ItemGroup>
  <Target Name="Main">
    <Message Text="$(destination)"/>
    <CallTarget Targets="CompileResources" />
    <CallTarget Targets="BuildSatelliteAssemblies" />
    <CallTarget Targets="CopyToFolder" Condition="$(destination)!=''"/>
    <CallTarget Targets="CleanUp" />
  </Target>
  <Target Name="CompileResources">
    <GenerateResource Sources="@(Res)" PublicClass="true" >
      <Output ItemName="Resources" TaskParameter="OutputResources"/>
    </GenerateResource>
  </Target>
  <Target Name="BuildSatelliteAssemblies" DependsOnTargets="CompileResources">
    <MakeDir Directories="%(Res.Culture)"/>
    <AL OutputAssembly="%(Culture)\%(Project).resources.dll"
        Version="0.0.0.0"
        Culture="%(Culture)"
        ProductName="%(Project)"
        Title="%(Project)"
        EmbedResources="@(Resources)"/>
  </Target>
  <Target Name="CopyToFolder" DependsOnTargets="BuildSatelliteAssemblies">
    <MakeDir Directories="$(destination)\%(Res.Culture)"/>
    <CreateItem Include="%(Res.Culture)\*.dll" AdditionalMetadata="Culture=%(Res.Culture)">
      <Output ItemName="SatelliteAssemblies" TaskParameter="Include"/>
    </CreateItem>
    <Copy DestinationFolder="$(destination)\%(Culture)" 
          SourceFiles="@(SatelliteAssemblies)" />
  </Target>
  <Target Name="CleanUp">
    <Delete Files="@(Resources)"/>
  </Target>
</Project>

附属程序集似乎可以正确编译和嵌入,但是当我将它们与我的应用程序一起放置时,它们无法识别,并且默认恢复为默认区域性资源。如果我使用 Visual Studio 构建项目并使用它创建的程序集,它们可以正常加载。

在导致应用程序识别我的外部构建程序集时,我一定遗漏了一些东西。它们的名称都相同,大小也几乎相同。

【问题讨论】:

    标签: c# msbuild localization assemblies resx


    【解决方案1】:

    在 AL 目标中,您可以设置一个内部命名空间,供程序集中的每个资源文件使用。设置正确的命名空间允许应用程序正确地找到程序集中的资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2022-08-22
      • 1970-01-01
      • 2017-07-28
      相关资源
      最近更新 更多