Приложение C # не распознает спутниковые ресурсные сборки - PullRequest
1 голос
/ 27 июля 2010

Из-за большого количества файлов .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 и использую сборки, которые он создает с этим, они загружаются нормально.

Я должен что-то упустить, чтобы приложение распознало мои внешние сборки.Все они названы одинаково, а размеры почти одинаковы.

1 Ответ

1 голос
/ 28 июля 2010

В цели AL вы можете установить внутреннее пространство имен, которое будет использоваться каждым файлом ресурсов в сборке.Установка правильного пространства имен позволила приложению правильно находить ресурсы в сборках.

...