display the posts of Custom Post type in custom category

I’m glad you’ve asked this, because doing this wrong is by far the most common mistake on this site. It’s not even close to whatever #2 is.

The answer is that you don’t need to do anything. WordPress will query the correct posts for you based on the URL. You just need to use the normal loop and template tags to display them:

<?php if ( have_posts() ) : ?>
    <?php while ( have_posts() ) : the_post(); ?>
        <?php the_title(); ?>
        <!-- etc. -->
    <?php endwhile; ?>
<?php endif; ?>

That loop is what loops through the posts that WordPress has already correctly queried based on the URL. So there’s no need for any custom WP_Query, get_posts() or pre_get_posts action. Nothing like that.

The exact template that will be used depends on what files are in your theme, and are determined by the template hierarchy, but all those templates should only include the exact same loop as above. The only reason you’d need to create a taxonomy-project_cat.php template is if you wanted this taxonomy’s archives to look different or use different markup, and if you did want that then you still use that same loop, because the query is always taken care of already.