วิธีรวมไฟล์ resx ในแพ็คเกจ Nuget

Aug 19 2020

ฉันมีโครงการ. Net Framework 4.6.1 ที่ฉันสร้างแพ็คเกจ nuget แพ็คเกจนักเก็ตนี้เพียงแค่ติดตั้ง 2 dll และไฟล์เนื้อหาสองสามไฟล์ซึ่งใช้งานได้ดี

ปัญหาคือตอนนี้ฉันเพิ่มสตริงทรัพยากรผ่านไฟล์ resx ที่อยู่ใน:

~\App_Data\Global\Resources\resource-strings.resx

และฉันไม่รู้ว่าจะทำให้ไฟล์นั้นเป็นส่วนหนึ่งของแพ็กเกจ nuget อย่างถูกต้องได้อย่างไร เมื่อฉันสร้าง. nupkg ฉันเห็นไฟล์ resx ที่นั่น แต่เมื่อฉันติดตั้งในโปรเจ็กต์อื่นไฟล์ resx ควรจะถูกคัดลอกไปยังโฟลเดอร์ App_Data \ Global \ Resources แต่มันไม่ใช่

เป็นไปได้ไหม?

จากสิ่งที่ฉันตรวจสอบฉันคิดว่าฉันต้องทำอะไรบางอย่างกับไฟล์เป้าหมาย + การกำหนดค่า nuspec แต่ฉันไม่ได้ลองอะไรเลย

ฉันแค่ต้องการไฟล์ resx ที่คัดลอกมา ไม่มีอะไรซับซ้อนไปกว่านั้น

คำตอบ

PerryQian-MSFT Aug 20 2020 at 06:02

แน่ใจ เป็นไปได้และทำได้โดย nuget เนื่องจากคุณต้องการคัดลอกไฟล์ทรัพยากรนี้ไปยังโฟลเดอร์โครงการ asp net เป้าหมายของคุณคุณสามารถลองทำตามขั้นตอนต่อไปนี้:

================================================== ===

ขั้นแรกหากคุณต้องการติดตั้งnet461แพ็กเกจ nuget นี้ในnet frameworkโปรเจ็กต์ asp net คุณควรใช้โหนดเนื้อหาในxxx.nusepcไฟล์

ก่อนให้แน่ใจว่าสร้างการดำเนินการของทรัพยากร Strings.resx จะฝังตัวทรัพยากรมากกว่าเนื้อหา

1) ก่อนอื่นให้เรียกใช้คำสั่ง cmd: cd xxxx(project folder path)แล้วเรียกใช้nuget specเพื่อสร้างไฟล์ nuspec สิ่งเหล่านี้เพียงพอแล้ว:

2)เปิดnuspecไฟล์และเพิ่มโหนดเนื้อหา:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <id>xxx</id>
        <version>xxx</version>
        <title>xxx</title>
        <authors>xxx</authors>
        ............       
    </metadata>
    <files>
        <file src="~\App_Data\Global\Resources\resource-strings.resx(the path of the file in net framework 4.6.1 project)" target="content\App_Data\Global\Resources\resource-strings.resx" />
    </files>
</package>

3)จากนั้นบันทึกnuspecไฟล์และเรียกใช้nuget packเพื่อสร้างไฟล์nupkg.

ก่อนที่คุณจะติดตั้งแพ็กเกจ nuget คุณควรล้างแคช nuget ก่อนเพื่อลบเวอร์ชันเก่าที่ไม่ถูกต้องของ nuget

เมื่อคุณติดตั้งแพคเกจนี้ไฟล์จะถูกคัดลอกไปยังรูทพา ธApp_Data\Global\Resources\resource-strings.resxของโปรเจ็กต์เว็บ

================================================== ==

หากคุณต้องการติดตั้งแพคเกจนี้ในโครงการใหม่ SDK (แกนสุทธิหรือ xxx กับPackageReferenceรูปแบบการจัดการ nuget) คุณสามารถสร้างไฟล์ควรเป้าหมายกับงานสำเนา

1)เพิ่มโฟลเดอร์ชื่อ build ใน net framework 4.6.1 project จากนั้นเพิ่มไฟล์ที่เรียกว่า<Package_id>.propsfile

โปรดทราบว่าคุณควรตรวจสอบให้แน่ใจว่า id ของแพ็กเกจ nuget เหมือนกับไฟล์<Package_id>.props. คำแนะนำจากที่นี่

2)เพิ่มสิ่งเหล่านี้ใน<Package_id>.props:

  <Project>
      <Target Name="CopyFilesToProject" BeforeTargets="Build">
        <Message Text="Copy resource-strings.resx  to project" />
        <ItemGroup>
          <SourceScripts Include="$(MSBuildThisFileDirectory)..\content\**\*.*"/> </ItemGroup> <Copy SourceFiles="@(SourceScripts)" DestinationFiles="$(MSBuildProjectDirectory)\%(RecursiveDir)%(Filename)%(Extension)"/>
      </Target>
      
    </Project>

3)แก้ไขxxx.nuspecไฟล์ดังนี้:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>xxx</id>
    <version>xxx</version>
    <title>xxx</title>
    <authors>xxx</authors>
    <owners>me</owners>
    ............
  </metadata>
 <files>
<file src="~\App_Data\Global\Resources\resource-strings.resx" target="content\App_Data\Global\Resources\resource-strings.resx" />
<file src="build\xxx(like package_id).props" target="build"/>
</files>

</package>

4)จากนั้นคุณควรใช้nuget packคำสั่งเพื่อแพ็คโครงการนี้ ก่อนที่คุณจะติดตั้งแพคเกจนี้คุณควรล้างแคช nuget ก่อน

หลังจากที่คุณติดตั้งแพ็กเกจ nuget นี้คุณควรสร้างโปรเจ็กต์ของคุณเพื่อรันเป้าหมายการคัดลอกที่กำหนดเองนี้เพื่อคัดลอกไฟล์ลงในโปรเจ็กต์หลักของคุณ

นอกจากนี้ยังมีปัญหาที่คล้ายกันเกี่ยวกับเรื่องนี้