후에 다시 설정합니다. XNA 콘텐츠 파이프 라인 프로젝트에 대해 컴파일 타임에 사용 된 로캘/문화권을 변경하고 컴파일이 끝난 후 원본을 복원하는 작업을 실행하려고합니다. 의도는 영어가 아닌 기계에서 수레의 적절한 구문 분석을 허용하는 것입니다.컴파일하기 전에 CultureInfo를 설정하고 항상
지금까지 나는이 같은 BeforeBuild 및 AfterBuild을 사용하고 있습니다 :
그것은 오류가 컴파일 (잘못된 XML 또는 ContentSerializer 오류) 동안 발생하는 경우를 제외하고는 제대로 작동<UsingTask TaskName="PressPlay.FFWD.BuildTasks.SetLocale" AssemblyFile="PressPlay.FFWD.BuildTasks.dll" />
<Target Name="BeforeBuild">
<SetLocale> <!-- By default, set to 'en-US' -->
<Output TaskParameter="PrevLocale" ItemName="OrigLocale" />
</SetLocale>
</Target>
<Target Name="AfterBuild">
<SetLocale Locale="@(OrigLocale)" />
</Target>
, 그 후에 로케일이 재설정되지 않습니다 . AfterBuild always executes (내 경우는 아님)과 빌드 후 no way to ensure a target is always ran이 있다고 말하는 사람들이 있으므로 모처럼의 대답은 모순입니다. 나는 이것에 관한 정확한 정보를 구글 주위에 발견하지 못했다.
내가 PostBuildEvent
을 사용하고 항상 실행되도록 설정하는 옵션이 알고 있지만,이 명령을 실행 Exec
을 사용하십시오 나는 그것의 목적을 물리 치고, 별도의 스레드에서 실행됩니다 용의자는 (내가 변경 CurrentThread.CultureInfo
설정 로케일).
그래서 대상이 항상 실행되도록하는 방법이 있습니까? 또는 특정 문화권에서 편집을 실행하도록 VS2010에 지시하는 다른 방법이 있습니까?
명시 적으로 문제를 명확히하는 문서에 대한 링크는 매우 높이 평가됩니다.
- Seva의의 대답은 다음과 같은 최종 솔루션-
XNA의 내용 파이프 라인은 PreBuildEvent
도 PostBuildEvent
를 선언하지 않습니다. 기타 필요한 특성 (RunPostBuildEvent
, PreBuildEventDependsOn
및 PostBuildEventDependsOn
)도 정의되어 있지 않습니다. 그러나이를 정의하면 다른 프로젝트와 마찬가지로 내용 파이프 라인을 잘 사용하게됩니다.
그래서, 나는 contentcsproj 파일을했습니다 변화가 있었다 : 다른 프로젝트가 BeforeBuild 또는 재정의하는 경우 발생할 수있는 잠재적 인 문제를 또 다른 문제가 간접적으로 돌보아이 솔루션으로
<!-- Added to ensure the locale is always restored -->
<PropertyGroup>
<RunPostBuildEvent>Always</RunPostBuildEvent>
</PropertyGroup>
<!-- Reference includes, project references and other stuff -->
<!-- ... -->
<Import Project="$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\$(XnaFrameworkVersion)\Microsoft.Xna.GameStudio.ContentPipeline.targets" />
<!-- Customizations to change locale before compilation and restore it after -->
<!-- Needed to properly treat dots in the XMLs as decimal separators -->
<UsingTask TaskName="PressPlay.FFWD.BuildTasks.SetLocale" AssemblyFile="PressPlay.FFWD.BuildTasks.dll" />
<!-- Apparently ContentPipeline.targets does not define PreBuildEvent and PostBuildEvent -->
<!-- However, they are still used if defined -->
<Target Name="PreBuildEvent" DependsOnTargets="$(PreBuildEventDependsOn)"/>
<Target Name="PostBuildEvent" DependsOnTargets="$(PostBuildEventDependsOn)"/>
<PropertyGroup>
<PreBuildEventDependsOn>
$(PreBuildEventDependsOn);
EstablishUSLocale
</PreBuildEventDependsOn>
</PropertyGroup>
<PropertyGroup>
<PostBuildEventDependsOn>
$(PostBuildEventDependsOn);
RestoreOriginalLocale
</PostBuildEventDependsOn>
</PropertyGroup>
<Target Name="EstablishUSLocale">
<SetLocale Locale="en-US">
<Output TaskParameter="PrevLocale" ItemName="OrigLocale" />
</SetLocale>
</Target>
<Target Name="RestoreOriginalLocale">
<SetLocale Locale="@(OrigLocale)" />
</Target>
AfterBuild, 정의 중 하나가 다른 것을 대체합니다.
이 솔루션은 완벽하게 작동했지만 XNA의 콘텐츠 파이프 라인을 사용하려면이 솔루션을 채택해야했습니다. 질문에 최종 해결책을 자세히 설명해 드리겠습니다. 약간의 코드가 포함되어 있기 때문입니다. – Elideb