Signmessagewithprivkey result is different than txinwitness I'm studying segwit and I'm doing some experiment in regtest.
I create a raw transaction with P2SH address.

My Transaction data without signature is:

0200000001faf19017fe7e20747535ac41009922e4beb76e17a7fd5423bc60e75fbc8381c40000000000ffffffff01606b042a0100000017a914b63007b51b936175644dcf654f77c528e35f01178700000000


that's my message to sign, instead to use signrawtransactionwithkey I try to use signmessagewithprivkey and I expect the signature that I can find in txwitness field (first row).

signmessagewithprivkey return base64 signature then I convert it in hex.
result is:

20db4febb769c43c9072daf30934a345b2327b6107e701f21c7fe052a040180d4129dc3079dc7dad29db37c31fa6401013819e386beb9396e330b3b6e9f7fbcf5b


signrawtransactionwithkey return:

"txinwitness": [
      "3044022077f49ad0371ea5baf0ce60d3d15175c9bb5e37ff7f3bc023b76863b2a91d379e022073010deba5eef8619745cd79d94a73c4a4527391253731104fc734449322d85b01",            "02985586bf43d26229a97092f76086cfe6f9bf09d93bef16a92f65185c8f7f0b17"
      ],


I wonder, why the result of signmessagewithprivkey isn't equal at first raw of txwitness?
From Elliptic Curve Cryptography perspective everything you sign is a "message" but the term "message" in bitcoin context means a random string that user wants to sign with his key (usually used for proof of ownership or something similar).
This means when you use sign*message*withprivkey the code interprets the input as a string and signs it with a different method that generates and entirely different digest ("some_fixed_string" + UTF8.Decode("0200000001f...")). But when you use sign*rawtransaction*withkey the code interprets the given string as a transaction and signs it based on its input scripts with different methods ("Transaction.Decode("0200000001f...") then Serialize() based on BIP143 for SegWit).